home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / swing / JTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  43.5 KB  |  2,622 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.GraphicsEnvironment;
  8. import java.awt.HeadlessException;
  9. import java.awt.KeyboardFocusManager;
  10. import java.awt.LayoutManager;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.awt.event.KeyEvent;
  14. import java.awt.event.MouseEvent;
  15. import java.awt.print.Printable;
  16. import java.awt.print.PrinterAbortException;
  17. import java.awt.print.PrinterException;
  18. import java.awt.print.PrinterJob;
  19. import java.beans.PropertyChangeListener;
  20. import java.io.IOException;
  21. import java.io.ObjectInputStream;
  22. import java.io.ObjectOutputStream;
  23. import java.text.MessageFormat;
  24. import java.util.Date;
  25. import java.util.Enumeration;
  26. import java.util.EventObject;
  27. import java.util.Hashtable;
  28. import java.util.Vector;
  29. import javax.accessibility.Accessible;
  30. import javax.accessibility.AccessibleContext;
  31. import javax.print.PrintService;
  32. import javax.print.attribute.HashPrintRequestAttributeSet;
  33. import javax.print.attribute.PrintRequestAttributeSet;
  34. import javax.swing.JTable.7;
  35. import javax.swing.border.Border;
  36. import javax.swing.event.CellEditorListener;
  37. import javax.swing.event.ChangeEvent;
  38. import javax.swing.event.ListSelectionEvent;
  39. import javax.swing.event.ListSelectionListener;
  40. import javax.swing.event.RowSorterEvent;
  41. import javax.swing.event.RowSorterListener;
  42. import javax.swing.event.TableColumnModelEvent;
  43. import javax.swing.event.TableColumnModelListener;
  44. import javax.swing.event.TableModelEvent;
  45. import javax.swing.event.TableModelListener;
  46. import javax.swing.event.RowSorterEvent.Type;
  47. import javax.swing.plaf.TableUI;
  48. import javax.swing.plaf.UIResource;
  49. import javax.swing.table.DefaultTableColumnModel;
  50. import javax.swing.table.DefaultTableModel;
  51. import javax.swing.table.JTableHeader;
  52. import javax.swing.table.TableCellEditor;
  53. import javax.swing.table.TableCellRenderer;
  54. import javax.swing.table.TableColumn;
  55. import javax.swing.table.TableColumnModel;
  56. import javax.swing.table.TableModel;
  57. import javax.swing.table.TableRowSorter;
  58. import sun.swing.PrintingStatus;
  59. import sun.swing.SwingUtilities2;
  60. import sun.swing.SwingUtilities2.Section;
  61.  
  62. public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible, RowSorterListener {
  63.    private static final String uiClassID = "TableUI";
  64.    public static final int AUTO_RESIZE_OFF = 0;
  65.    public static final int AUTO_RESIZE_NEXT_COLUMN = 1;
  66.    public static final int AUTO_RESIZE_SUBSEQUENT_COLUMNS = 2;
  67.    public static final int AUTO_RESIZE_LAST_COLUMN = 3;
  68.    public static final int AUTO_RESIZE_ALL_COLUMNS = 4;
  69.    protected TableModel dataModel;
  70.    protected TableColumnModel columnModel;
  71.    protected ListSelectionModel selectionModel;
  72.    protected JTableHeader tableHeader;
  73.    protected int rowHeight;
  74.    protected int rowMargin;
  75.    protected Color gridColor;
  76.    protected boolean showHorizontalLines;
  77.    protected boolean showVerticalLines;
  78.    protected int autoResizeMode;
  79.    protected boolean autoCreateColumnsFromModel;
  80.    protected Dimension preferredViewportSize;
  81.    protected boolean rowSelectionAllowed;
  82.    protected boolean cellSelectionEnabled;
  83.    protected transient Component editorComp;
  84.    protected transient TableCellEditor cellEditor;
  85.    protected transient int editingColumn;
  86.    protected transient int editingRow;
  87.    protected transient Hashtable defaultRenderersByColumnClass;
  88.    protected transient Hashtable defaultEditorsByColumnClass;
  89.    protected Color selectionForeground;
  90.    protected Color selectionBackground;
  91.    private SizeSequence rowModel;
  92.    private boolean dragEnabled;
  93.    private boolean surrendersFocusOnKeystroke;
  94.    private PropertyChangeListener editorRemover;
  95.    private boolean columnSelectionAdjusting;
  96.    private boolean rowSelectionAdjusting;
  97.    private Throwable printError;
  98.    private boolean isRowHeightSet;
  99.    private boolean updateSelectionOnSort;
  100.    private transient SortManager sortManager;
  101.    private boolean ignoreSortChange;
  102.    private boolean sorterChanged;
  103.    private boolean autoCreateRowSorter;
  104.    private boolean fillsViewportHeight;
  105.    private DropMode dropMode;
  106.    private transient DropLocation dropLocation;
  107.  
  108.    public JTable() {
  109.       this((TableModel)null, (TableColumnModel)null, (ListSelectionModel)null);
  110.    }
  111.  
  112.    public JTable(TableModel var1) {
  113.       this(var1, (TableColumnModel)null, (ListSelectionModel)null);
  114.    }
  115.  
  116.    public JTable(TableModel var1, TableColumnModel var2) {
  117.       this(var1, var2, (ListSelectionModel)null);
  118.    }
  119.  
  120.    public JTable(TableModel var1, TableColumnModel var2, ListSelectionModel var3) {
  121.       this.editorRemover = null;
  122.       this.dropMode = DropMode.USE_SELECTION;
  123.       this.setLayout((LayoutManager)null);
  124.       this.setFocusTraversalKeys(0, JComponent.getManagingFocusForwardTraversalKeys());
  125.       this.setFocusTraversalKeys(1, JComponent.getManagingFocusBackwardTraversalKeys());
  126.       if (var2 == null) {
  127.          var2 = this.createDefaultColumnModel();
  128.          this.autoCreateColumnsFromModel = true;
  129.       }
  130.  
  131.       this.setColumnModel(var2);
  132.       if (var3 == null) {
  133.          var3 = this.createDefaultSelectionModel();
  134.       }
  135.  
  136.       this.setSelectionModel(var3);
  137.       if (var1 == null) {
  138.          var1 = this.createDefaultDataModel();
  139.       }
  140.  
  141.       this.setModel(var1);
  142.       this.initializeLocalVars();
  143.       this.updateUI();
  144.    }
  145.  
  146.    public JTable(int var1, int var2) {
  147.       this(new DefaultTableModel(var1, var2));
  148.    }
  149.  
  150.    public JTable(Vector var1, Vector var2) {
  151.       this(new DefaultTableModel(var1, var2));
  152.    }
  153.  
  154.    public JTable(Object[][] var1, Object[] var2) {
  155.       this(new 1(var2, var1));
  156.    }
  157.  
  158.    public void addNotify() {
  159.       super.addNotify();
  160.       this.configureEnclosingScrollPane();
  161.    }
  162.  
  163.    protected void configureEnclosingScrollPane() {
  164.       Container var1 = this.getParent();
  165.       if (var1 instanceof JViewport) {
  166.          Container var2 = var1.getParent();
  167.          if (var2 instanceof JScrollPane) {
  168.             JScrollPane var3 = (JScrollPane)var2;
  169.             JViewport var4 = var3.getViewport();
  170.             if (var4 == null || var4.getView() != this) {
  171.                return;
  172.             }
  173.  
  174.             var3.setColumnHeaderView(this.getTableHeader());
  175.             Border var5 = var3.getBorder();
  176.             if (var5 == null || var5 instanceof UIResource) {
  177.                Border var6 = UIManager.getBorder("Table.scrollPaneBorder");
  178.                if (var6 != null) {
  179.                   var3.setBorder(var6);
  180.                }
  181.             }
  182.          }
  183.       }
  184.  
  185.    }
  186.  
  187.    public void removeNotify() {
  188.       KeyboardFocusManager.getCurrentKeyboardFocusManager().removePropertyChangeListener("permanentFocusOwner", this.editorRemover);
  189.       this.editorRemover = null;
  190.       this.unconfigureEnclosingScrollPane();
  191.       super.removeNotify();
  192.    }
  193.  
  194.    protected void unconfigureEnclosingScrollPane() {
  195.       Container var1 = this.getParent();
  196.       if (var1 instanceof JViewport) {
  197.          Container var2 = var1.getParent();
  198.          if (var2 instanceof JScrollPane) {
  199.             JScrollPane var3 = (JScrollPane)var2;
  200.             JViewport var4 = var3.getViewport();
  201.             if (var4 == null || var4.getView() != this) {
  202.                return;
  203.             }
  204.  
  205.             var3.setColumnHeaderView((Component)null);
  206.          }
  207.       }
  208.  
  209.    }
  210.  
  211.    void setUIProperty(String var1, Object var2) {
  212.       if (var1 == "rowHeight") {
  213.          if (!this.isRowHeightSet) {
  214.             this.setRowHeight(((Number)var2).intValue());
  215.             this.isRowHeightSet = false;
  216.          }
  217.  
  218.       } else {
  219.          super.setUIProperty(var1, var2);
  220.       }
  221.    }
  222.  
  223.    /** @deprecated */
  224.    @Deprecated
  225.    public static JScrollPane createScrollPaneForTable(JTable var0) {
  226.       return new JScrollPane(var0);
  227.    }
  228.  
  229.    public void setTableHeader(JTableHeader var1) {
  230.       if (this.tableHeader != var1) {
  231.          JTableHeader var2 = this.tableHeader;
  232.          if (var2 != null) {
  233.             var2.setTable((JTable)null);
  234.          }
  235.  
  236.          this.tableHeader = var1;
  237.          if (var1 != null) {
  238.             var1.setTable(this);
  239.          }
  240.  
  241.          this.firePropertyChange("tableHeader", var2, var1);
  242.       }
  243.  
  244.    }
  245.  
  246.    public JTableHeader getTableHeader() {
  247.       return this.tableHeader;
  248.    }
  249.  
  250.    public void setRowHeight(int var1) {
  251.       if (var1 <= 0) {
  252.          throw new IllegalArgumentException("New row height less than 1");
  253.       } else {
  254.          int var2 = this.rowHeight;
  255.          this.rowHeight = var1;
  256.          this.rowModel = null;
  257.          if (this.sortManager != null) {
  258.             javax.swing.JTable.SortManager.access$002(this.sortManager, (SizeSequence)null);
  259.          }
  260.  
  261.          this.isRowHeightSet = true;
  262.          this.resizeAndRepaint();
  263.          this.firePropertyChange("rowHeight", var2, var1);
  264.       }
  265.    }
  266.  
  267.    public int getRowHeight() {
  268.       return this.rowHeight;
  269.    }
  270.  
  271.    private SizeSequence getRowModel() {
  272.       if (this.rowModel == null) {
  273.          this.rowModel = new SizeSequence(this.getRowCount(), this.getRowHeight());
  274.       }
  275.  
  276.       return this.rowModel;
  277.    }
  278.  
  279.    public void setRowHeight(int var1, int var2) {
  280.       if (var2 <= 0) {
  281.          throw new IllegalArgumentException("New row height less than 1");
  282.       } else {
  283.          this.getRowModel().setSize(var1, var2);
  284.          if (this.sortManager != null) {
  285.             this.sortManager.setViewRowHeight(var1, var2);
  286.          }
  287.  
  288.          this.resizeAndRepaint();
  289.       }
  290.    }
  291.  
  292.    public int getRowHeight(int var1) {
  293.       return this.rowModel == null ? this.getRowHeight() : this.rowModel.getSize(var1);
  294.    }
  295.  
  296.    public void setRowMargin(int var1) {
  297.       int var2 = this.rowMargin;
  298.       this.rowMargin = var1;
  299.       this.resizeAndRepaint();
  300.       this.firePropertyChange("rowMargin", var2, var1);
  301.    }
  302.  
  303.    public int getRowMargin() {
  304.       return this.rowMargin;
  305.    }
  306.  
  307.    public void setIntercellSpacing(Dimension var1) {
  308.       this.setRowMargin(var1.height);
  309.       this.getColumnModel().setColumnMargin(var1.width);
  310.       this.resizeAndRepaint();
  311.    }
  312.  
  313.    public Dimension getIntercellSpacing() {
  314.       return new Dimension(this.getColumnModel().getColumnMargin(), this.rowMargin);
  315.    }
  316.  
  317.    public void setGridColor(Color var1) {
  318.       if (var1 == null) {
  319.          throw new IllegalArgumentException("New color is null");
  320.       } else {
  321.          Color var2 = this.gridColor;
  322.          this.gridColor = var1;
  323.          this.firePropertyChange("gridColor", var2, var1);
  324.          this.repaint();
  325.       }
  326.    }
  327.  
  328.    public Color getGridColor() {
  329.       return this.gridColor;
  330.    }
  331.  
  332.    public void setShowGrid(boolean var1) {
  333.       this.setShowHorizontalLines(var1);
  334.       this.setShowVerticalLines(var1);
  335.       this.repaint();
  336.    }
  337.  
  338.    public void setShowHorizontalLines(boolean var1) {
  339.       boolean var2 = this.showHorizontalLines;
  340.       this.showHorizontalLines = var1;
  341.       this.firePropertyChange("showHorizontalLines", var2, var1);
  342.       this.repaint();
  343.    }
  344.  
  345.    public void setShowVerticalLines(boolean var1) {
  346.       boolean var2 = this.showVerticalLines;
  347.       this.showVerticalLines = var1;
  348.       this.firePropertyChange("showVerticalLines", var2, var1);
  349.       this.repaint();
  350.    }
  351.  
  352.    public boolean getShowHorizontalLines() {
  353.       return this.showHorizontalLines;
  354.    }
  355.  
  356.    public boolean getShowVerticalLines() {
  357.       return this.showVerticalLines;
  358.    }
  359.  
  360.    public void setAutoResizeMode(int var1) {
  361.       if (var1 == 0 || var1 == 1 || var1 == 2 || var1 == 3 || var1 == 4) {
  362.          int var2 = this.autoResizeMode;
  363.          this.autoResizeMode = var1;
  364.          this.resizeAndRepaint();
  365.          if (this.tableHeader != null) {
  366.             this.tableHeader.resizeAndRepaint();
  367.          }
  368.  
  369.          this.firePropertyChange("autoResizeMode", var2, this.autoResizeMode);
  370.       }
  371.  
  372.    }
  373.  
  374.    public int getAutoResizeMode() {
  375.       return this.autoResizeMode;
  376.    }
  377.  
  378.    public void setAutoCreateColumnsFromModel(boolean var1) {
  379.       if (this.autoCreateColumnsFromModel != var1) {
  380.          boolean var2 = this.autoCreateColumnsFromModel;
  381.          this.autoCreateColumnsFromModel = var1;
  382.          if (var1) {
  383.             this.createDefaultColumnsFromModel();
  384.          }
  385.  
  386.          this.firePropertyChange("autoCreateColumnsFromModel", var2, var1);
  387.       }
  388.  
  389.    }
  390.  
  391.    public boolean getAutoCreateColumnsFromModel() {
  392.       return this.autoCreateColumnsFromModel;
  393.    }
  394.  
  395.    public void createDefaultColumnsFromModel() {
  396.       TableModel var1 = this.getModel();
  397.       if (var1 != null) {
  398.          TableColumnModel var2 = this.getColumnModel();
  399.  
  400.          while(var2.getColumnCount() > 0) {
  401.             var2.removeColumn(var2.getColumn(0));
  402.          }
  403.  
  404.          for(int var3 = 0; var3 < var1.getColumnCount(); ++var3) {
  405.             TableColumn var4 = new TableColumn(var3);
  406.             this.addColumn(var4);
  407.          }
  408.       }
  409.  
  410.    }
  411.  
  412.    public void setDefaultRenderer(Class<?> var1, TableCellRenderer var2) {
  413.       if (var2 != null) {
  414.          this.defaultRenderersByColumnClass.put(var1, var2);
  415.       } else {
  416.          this.defaultRenderersByColumnClass.remove(var1);
  417.       }
  418.  
  419.    }
  420.  
  421.    public TableCellRenderer getDefaultRenderer(Class<?> var1) {
  422.       if (var1 == null) {
  423.          return null;
  424.       } else {
  425.          Object var2 = this.defaultRenderersByColumnClass.get(var1);
  426.          return var2 != null ? (TableCellRenderer)var2 : this.getDefaultRenderer(var1.getSuperclass());
  427.       }
  428.    }
  429.  
  430.    public void setDefaultEditor(Class<?> var1, TableCellEditor var2) {
  431.       if (var2 != null) {
  432.          this.defaultEditorsByColumnClass.put(var1, var2);
  433.       } else {
  434.          this.defaultEditorsByColumnClass.remove(var1);
  435.       }
  436.  
  437.    }
  438.  
  439.    public TableCellEditor getDefaultEditor(Class<?> var1) {
  440.       if (var1 == null) {
  441.          return null;
  442.       } else {
  443.          Object var2 = this.defaultEditorsByColumnClass.get(var1);
  444.          return var2 != null ? (TableCellEditor)var2 : this.getDefaultEditor(var1.getSuperclass());
  445.       }
  446.    }
  447.  
  448.    public void setDragEnabled(boolean var1) {
  449.       if (var1 && GraphicsEnvironment.isHeadless()) {
  450.          throw new HeadlessException();
  451.       } else {
  452.          this.dragEnabled = var1;
  453.       }
  454.    }
  455.  
  456.    public boolean getDragEnabled() {
  457.       return this.dragEnabled;
  458.    }
  459.  
  460.    public final void setDropMode(DropMode var1) {
  461.       if (var1 != null) {
  462.          switch (7.$SwitchMap$javax$swing$DropMode[var1.ordinal()]) {
  463.             case 1:
  464.             case 2:
  465.             case 3:
  466.             case 4:
  467.             case 5:
  468.             case 6:
  469.             case 7:
  470.             case 8:
  471.                this.dropMode = var1;
  472.                return;
  473.          }
  474.       }
  475.  
  476.       throw new IllegalArgumentException(var1 + ": Unsupported drop mode for table");
  477.    }
  478.  
  479.    public final DropMode getDropMode() {
  480.       return this.dropMode;
  481.    }
  482.  
  483.    DropLocation dropLocationForPoint(Point var1) {
  484.       DropLocation var2 = null;
  485.       int var3 = this.rowAtPoint(var1);
  486.       int var4 = this.columnAtPoint(var1);
  487.       boolean var5 = Boolean.TRUE == this.getClientProperty("Table.isFileList") && SwingUtilities2.pointOutsidePrefSize(this, var3, var4, var1);
  488.       Rectangle var6 = this.getCellRect(var3, var4, true);
  489.       boolean var9 = false;
  490.       boolean var10 = this.getComponentOrientation().isLeftToRight();
  491.       switch (7.$SwitchMap$javax$swing$DropMode[this.dropMode.ordinal()]) {
  492.          case 1:
  493.          case 2:
  494.             if (var3 != -1 && var4 != -1 && !var5) {
  495.                var2 = new DropLocation(var1, var3, var4, false, false, (1)null);
  496.             } else {
  497.                var2 = new DropLocation(var1, -1, -1, false, false, (1)null);
  498.             }
  499.             break;
  500.          case 3:
  501.             if (var3 == -1 && var4 == -1) {
  502.                var2 = new DropLocation(var1, 0, 0, true, true, (1)null);
  503.             } else {
  504.                SwingUtilities2.Section var12 = SwingUtilities2.liesInHorizontal(var6, var1, var10, true);
  505.                if (var3 == -1) {
  506.                   if (var12 == Section.LEADING) {
  507.                      var2 = new DropLocation(var1, this.getRowCount(), var4, true, true, (1)null);
  508.                   } else if (var12 == Section.TRAILING) {
  509.                      var2 = new DropLocation(var1, this.getRowCount(), var4 + 1, true, true, (1)null);
  510.                   } else {
  511.                      var2 = new DropLocation(var1, this.getRowCount(), var4, true, false, (1)null);
  512.                   }
  513.                } else if (var12 != Section.LEADING && var12 != Section.TRAILING) {
  514.                   if (SwingUtilities2.liesInVertical(var6, var1, false) == Section.TRAILING) {
  515.                      ++var3;
  516.                   }
  517.  
  518.                   var2 = new DropLocation(var1, var3, var4, true, false, (1)null);
  519.                } else {
  520.                   SwingUtilities2.Section var14 = SwingUtilities2.liesInVertical(var6, var1, true);
  521.                   if (var14 == Section.LEADING) {
  522.                      var9 = true;
  523.                   } else if (var14 == Section.TRAILING) {
  524.                      ++var3;
  525.                      var9 = true;
  526.                   }
  527.  
  528.                   var2 = new DropLocation(var1, var3, var12 == Section.TRAILING ? var4 + 1 : var4, var9, true, (1)null);
  529.                }
  530.             }
  531.             break;
  532.          case 4:
  533.             if (var3 == -1 && var4 == -1) {
  534.                var2 = new DropLocation(var1, -1, -1, false, false, (1)null);
  535.             } else if (var3 == -1) {
  536.                var2 = new DropLocation(var1, this.getRowCount(), var4, true, false, (1)null);
  537.             } else {
  538.                if (SwingUtilities2.liesInVertical(var6, var1, false) == Section.TRAILING) {
  539.                   ++var3;
  540.                }
  541.  
  542.                var2 = new DropLocation(var1, var3, var4, true, false, (1)null);
  543.             }
  544.             break;
  545.          case 5:
  546.             if (var3 == -1) {
  547.                var2 = new DropLocation(var1, -1, -1, false, false, (1)null);
  548.             } else if (var4 == -1) {
  549.                var2 = new DropLocation(var1, this.getColumnCount(), var4, false, true, (1)null);
  550.             } else {
  551.                if (SwingUtilities2.liesInHorizontal(var6, var1, var10, false) == Section.TRAILING) {
  552.                   ++var4;
  553.                }
  554.  
  555.                var2 = new DropLocation(var1, var3, var4, false, true, (1)null);
  556.             }
  557.             break;
  558.          case 6:
  559.             if (var3 == -1 && var4 == -1) {
  560.                var2 = new DropLocation(var1, 0, 0, true, true, (1)null);
  561.             } else {
  562.                SwingUtilities2.Section var11 = SwingUtilities2.liesInHorizontal(var6, var1, var10, true);
  563.                if (var3 == -1) {
  564.                   if (var11 == Section.LEADING) {
  565.                      var2 = new DropLocation(var1, this.getRowCount(), var4, true, true, (1)null);
  566.                   } else if (var11 == Section.TRAILING) {
  567.                      var2 = new DropLocation(var1, this.getRowCount(), var4 + 1, true, true, (1)null);
  568.                   } else {
  569.                      var2 = new DropLocation(var1, this.getRowCount(), var4, true, false, (1)null);
  570.                   }
  571.                } else {
  572.                   SwingUtilities2.Section var13 = SwingUtilities2.liesInVertical(var6, var1, true);
  573.                   if (var13 == Section.LEADING) {
  574.                      var9 = true;
  575.                   } else if (var13 == Section.TRAILING) {
  576.                      ++var3;
  577.                      var9 = true;
  578.                   }
  579.  
  580.                   var2 = new DropLocation(var1, var3, var11 == Section.TRAILING ? var4 + 1 : var4, var9, var11 != Section.MIDDLE, (1)null);
  581.                }
  582.             }
  583.             break;
  584.          case 7:
  585.             if (var3 == -1 && var4 == -1) {
  586.                var2 = new DropLocation(var1, -1, -1, false, false, (1)null);
  587.             } else if (var3 == -1) {
  588.                var2 = new DropLocation(var1, this.getRowCount(), var4, true, false, (1)null);
  589.             } else {
  590.                SwingUtilities2.Section var8 = SwingUtilities2.liesInVertical(var6, var1, true);
  591.                if (var8 == Section.LEADING) {
  592.                   var9 = true;
  593.                } else if (var8 == Section.TRAILING) {
  594.                   ++var3;
  595.                   var9 = true;
  596.                }
  597.  
  598.                var2 = new DropLocation(var1, var3, var4, var9, false, (1)null);
  599.             }
  600.             break;
  601.          case 8:
  602.             if (var3 == -1) {
  603.                var2 = new DropLocation(var1, -1, -1, false, false, (1)null);
  604.             } else if (var4 == -1) {
  605.                var2 = new DropLocation(var1, var3, this.getColumnCount(), false, true, (1)null);
  606.             } else {
  607.                SwingUtilities2.Section var7 = SwingUtilities2.liesInHorizontal(var6, var1, var10, true);
  608.                if (var7 == Section.LEADING) {
  609.                   var9 = true;
  610.                } else if (var7 == Section.TRAILING) {
  611.                   ++var4;
  612.                   var9 = true;
  613.                }
  614.  
  615.                var2 = new DropLocation(var1, var3, var4, false, var9, (1)null);
  616.             }
  617.             break;
  618.          default:
  619.             assert false : "Unexpected drop mode";
  620.       }
  621.  
  622.       return var2;
  623.    }
  624.  
  625.    Object setDropLocation(TransferHandler.DropLocation var1, Object var2, boolean var3) {
  626.       Object var4 = null;
  627.       DropLocation var5 = (DropLocation)var1;
  628.       if (this.dropMode == DropMode.USE_SELECTION) {
  629.          if (var5 == null) {
  630.             if (!var3 && var2 != null) {
  631.                this.clearSelection();
  632.                int[] var6 = ((int[][])((int[][])var2))[0];
  633.                int[] var7 = ((int[][])((int[][])var2))[1];
  634.                int[] var8 = ((int[][])((int[][])var2))[2];
  635.  
  636.                for(int var9 = 0; var9 < var6.length; ++var9) {
  637.                   this.addRowSelectionInterval(var6[var9], var6[var9]);
  638.                }
  639.  
  640.                for(int var11 = 0; var11 < var7.length; ++var11) {
  641.                   this.addColumnSelectionInterval(var7[var11], var7[var11]);
  642.                }
  643.  
  644.                SwingUtilities2.setLeadAnchorWithoutSelection(this.getSelectionModel(), var8[1], var8[0]);
  645.                SwingUtilities2.setLeadAnchorWithoutSelection(this.getColumnModel().getSelectionModel(), var8[3], var8[2]);
  646.             }
  647.          } else {
  648.             if (this.dropLocation == null) {
  649.                var4 = new int[][]{this.getSelectedRows(), this.getSelectedColumns(), {this.getAdjustedIndex(this.getSelectionModel().getAnchorSelectionIndex(), true), this.getAdjustedIndex(this.getSelectionModel().getLeadSelectionIndex(), true), this.getAdjustedIndex(this.getColumnModel().getSelectionModel().getAnchorSelectionIndex(), false), this.getAdjustedIndex(this.getColumnModel().getSelectionModel().getLeadSelectionIndex(), false)}};
  650.             } else {
  651.                var4 = var2;
  652.             }
  653.  
  654.             if (var5.getRow() == -1) {
  655.                this.clearSelectionAndLeadAnchor();
  656.             } else {
  657.                this.setRowSelectionInterval(var5.getRow(), var5.getRow());
  658.                this.setColumnSelectionInterval(var5.getColumn(), var5.getColumn());
  659.             }
  660.          }
  661.       }
  662.  
  663.       DropLocation var10 = this.dropLocation;
  664.       this.dropLocation = var5;
  665.       this.firePropertyChange("dropLocation", var10, this.dropLocation);
  666.       return var4;
  667.    }
  668.  
  669.    public final DropLocation getDropLocation() {
  670.       return this.dropLocation;
  671.    }
  672.  
  673.    public void setAutoCreateRowSorter(boolean var1) {
  674.       boolean var2 = this.autoCreateRowSorter;
  675.       this.autoCreateRowSorter = var1;
  676.       if (var1) {
  677.          this.setRowSorter(new TableRowSorter(this.getModel()));
  678.       }
  679.  
  680.       this.firePropertyChange("autoCreateRowSorter", var2, var1);
  681.    }
  682.  
  683.    public boolean getAutoCreateRowSorter() {
  684.       return this.autoCreateRowSorter;
  685.    }
  686.  
  687.    public void setUpdateSelectionOnSort(boolean var1) {
  688.       if (this.updateSelectionOnSort != var1) {
  689.          this.updateSelectionOnSort = var1;
  690.          this.firePropertyChange("updateSelectionOnSort", !var1, var1);
  691.       }
  692.  
  693.    }
  694.  
  695.    public boolean getUpdateSelectionOnSort() {
  696.       return this.updateSelectionOnSort;
  697.    }
  698.  
  699.    public void setRowSorter(RowSorter<? extends TableModel> var1) {
  700.       RowSorter var2 = null;
  701.       if (this.sortManager != null) {
  702.          var2 = this.sortManager.sorter;
  703.          this.sortManager.dispose();
  704.          this.sortManager = null;
  705.       }
  706.  
  707.       this.rowModel = null;
  708.       this.clearSelectionAndLeadAnchor();
  709.       if (var1 != null) {
  710.          this.sortManager = new SortManager(this, var1);
  711.       }
  712.  
  713.       this.resizeAndRepaint();
  714.       this.firePropertyChange("sorter", var2, var1);
  715.    }
  716.  
  717.    public RowSorter<? extends TableModel> getRowSorter() {
  718.       return this.sortManager != null ? this.sortManager.sorter : null;
  719.    }
  720.  
  721.    public void setSelectionMode(int var1) {
  722.       this.clearSelection();
  723.       this.getSelectionModel().setSelectionMode(var1);
  724.       this.getColumnModel().getSelectionModel().setSelectionMode(var1);
  725.    }
  726.  
  727.    public void setRowSelectionAllowed(boolean var1) {
  728.       boolean var2 = this.rowSelectionAllowed;
  729.       this.rowSelectionAllowed = var1;
  730.       if (var2 != var1) {
  731.          this.repaint();
  732.       }
  733.  
  734.       this.firePropertyChange("rowSelectionAllowed", var2, var1);
  735.    }
  736.  
  737.    public boolean getRowSelectionAllowed() {
  738.       return this.rowSelectionAllowed;
  739.    }
  740.  
  741.    public void setColumnSelectionAllowed(boolean var1) {
  742.       boolean var2 = this.columnModel.getColumnSelectionAllowed();
  743.       this.columnModel.setColumnSelectionAllowed(var1);
  744.       if (var2 != var1) {
  745.          this.repaint();
  746.       }
  747.  
  748.       this.firePropertyChange("columnSelectionAllowed", var2, var1);
  749.    }
  750.  
  751.    public boolean getColumnSelectionAllowed() {
  752.       return this.columnModel.getColumnSelectionAllowed();
  753.    }
  754.  
  755.    public void setCellSelectionEnabled(boolean var1) {
  756.       this.setRowSelectionAllowed(var1);
  757.       this.setColumnSelectionAllowed(var1);
  758.       boolean var2 = this.cellSelectionEnabled;
  759.       this.cellSelectionEnabled = var1;
  760.       this.firePropertyChange("cellSelectionEnabled", var2, var1);
  761.    }
  762.  
  763.    public boolean getCellSelectionEnabled() {
  764.       return this.getRowSelectionAllowed() && this.getColumnSelectionAllowed();
  765.    }
  766.  
  767.    public void selectAll() {
  768.       if (this.isEditing()) {
  769.          this.removeEditor();
  770.       }
  771.  
  772.       if (this.getRowCount() > 0 && this.getColumnCount() > 0) {
  773.          ListSelectionModel var3 = this.selectionModel;
  774.          var3.setValueIsAdjusting(true);
  775.          int var1 = this.getAdjustedIndex(var3.getLeadSelectionIndex(), true);
  776.          int var2 = this.getAdjustedIndex(var3.getAnchorSelectionIndex(), true);
  777.          this.setRowSelectionInterval(0, this.getRowCount() - 1);
  778.          if (var2 == -1) {
  779.             var2 = var1;
  780.          }
  781.  
  782.          if (var1 == -1) {
  783.             var3.setAnchorSelectionIndex(-1);
  784.             var3.setLeadSelectionIndex(-1);
  785.          } else {
  786.             var3.addSelectionInterval(var2, var1);
  787.          }
  788.  
  789.          var3.setValueIsAdjusting(false);
  790.          var3 = this.columnModel.getSelectionModel();
  791.          var3.setValueIsAdjusting(true);
  792.          var1 = this.getAdjustedIndex(var3.getLeadSelectionIndex(), false);
  793.          var2 = this.getAdjustedIndex(var3.getAnchorSelectionIndex(), false);
  794.          this.setColumnSelectionInterval(0, this.getColumnCount() - 1);
  795.          if (var2 == -1) {
  796.             var2 = var1;
  797.          }
  798.  
  799.          if (var1 == -1) {
  800.             var3.setAnchorSelectionIndex(-1);
  801.             var3.setLeadSelectionIndex(-1);
  802.          } else {
  803.             var3.addSelectionInterval(var2, var1);
  804.          }
  805.  
  806.          var3.setValueIsAdjusting(false);
  807.       }
  808.  
  809.    }
  810.  
  811.    public void clearSelection() {
  812.       this.selectionModel.clearSelection();
  813.       this.columnModel.getSelectionModel().clearSelection();
  814.    }
  815.  
  816.    private void clearSelectionAndLeadAnchor() {
  817.       this.selectionModel.setValueIsAdjusting(true);
  818.       this.columnModel.getSelectionModel().setValueIsAdjusting(true);
  819.       this.clearSelection();
  820.       this.selectionModel.setAnchorSelectionIndex(-1);
  821.       this.selectionModel.setLeadSelectionIndex(-1);
  822.       this.columnModel.getSelectionModel().setAnchorSelectionIndex(-1);
  823.       this.columnModel.getSelectionModel().setLeadSelectionIndex(-1);
  824.       this.selectionModel.setValueIsAdjusting(false);
  825.       this.columnModel.getSelectionModel().setValueIsAdjusting(false);
  826.    }
  827.  
  828.    private int getAdjustedIndex(int var1, boolean var2) {
  829.       int var3 = var2 ? this.getRowCount() : this.getColumnCount();
  830.       return var1 < var3 ? var1 : -1;
  831.    }
  832.  
  833.    private int boundRow(int var1) throws IllegalArgumentException {
  834.       if (var1 >= 0 && var1 < this.getRowCount()) {
  835.          return var1;
  836.       } else {
  837.          throw new IllegalArgumentException("Row index out of range");
  838.       }
  839.    }
  840.  
  841.    private int boundColumn(int var1) {
  842.       if (var1 >= 0 && var1 < this.getColumnCount()) {
  843.          return var1;
  844.       } else {
  845.          throw new IllegalArgumentException("Column index out of range");
  846.       }
  847.    }
  848.  
  849.    public void setRowSelectionInterval(int var1, int var2) {
  850.       this.selectionModel.setSelectionInterval(this.boundRow(var1), this.boundRow(var2));
  851.    }
  852.  
  853.    public void setColumnSelectionInterval(int var1, int var2) {
  854.       this.columnModel.getSelectionModel().setSelectionInterval(this.boundColumn(var1), this.boundColumn(var2));
  855.    }
  856.  
  857.    public void addRowSelectionInterval(int var1, int var2) {
  858.       this.selectionModel.addSelectionInterval(this.boundRow(var1), this.boundRow(var2));
  859.    }
  860.  
  861.    public void addColumnSelectionInterval(int var1, int var2) {
  862.       this.columnModel.getSelectionModel().addSelectionInterval(this.boundColumn(var1), this.boundColumn(var2));
  863.    }
  864.  
  865.    public void removeRowSelectionInterval(int var1, int var2) {
  866.       this.selectionModel.removeSelectionInterval(this.boundRow(var1), this.boundRow(var2));
  867.    }
  868.  
  869.    public void removeColumnSelectionInterval(int var1, int var2) {
  870.       this.columnModel.getSelectionModel().removeSelectionInterval(this.boundColumn(var1), this.boundColumn(var2));
  871.    }
  872.  
  873.    public int getSelectedRow() {
  874.       return this.selectionModel.getMinSelectionIndex();
  875.    }
  876.  
  877.    public int getSelectedColumn() {
  878.       return this.columnModel.getSelectionModel().getMinSelectionIndex();
  879.    }
  880.  
  881.    public int[] getSelectedRows() {
  882.       int var1 = this.selectionModel.getMinSelectionIndex();
  883.       int var2 = this.selectionModel.getMaxSelectionIndex();
  884.       if (var1 != -1 && var2 != -1) {
  885.          int[] var3 = new int[1 + (var2 - var1)];
  886.          int var4 = 0;
  887.  
  888.          for(int var5 = var1; var5 <= var2; ++var5) {
  889.             if (this.selectionModel.isSelectedIndex(var5)) {
  890.                var3[var4++] = var5;
  891.             }
  892.          }
  893.  
  894.          int[] var6 = new int[var4];
  895.          System.arraycopy(var3, 0, var6, 0, var4);
  896.          return var6;
  897.       } else {
  898.          return new int[0];
  899.       }
  900.    }
  901.  
  902.    public int[] getSelectedColumns() {
  903.       return this.columnModel.getSelectedColumns();
  904.    }
  905.  
  906.    public int getSelectedRowCount() {
  907.       int var1 = this.selectionModel.getMinSelectionIndex();
  908.       int var2 = this.selectionModel.getMaxSelectionIndex();
  909.       int var3 = 0;
  910.  
  911.       for(int var4 = var1; var4 <= var2; ++var4) {
  912.          if (this.selectionModel.isSelectedIndex(var4)) {
  913.             ++var3;
  914.          }
  915.       }
  916.  
  917.       return var3;
  918.    }
  919.  
  920.    public int getSelectedColumnCount() {
  921.       return this.columnModel.getSelectedColumnCount();
  922.    }
  923.  
  924.    public boolean isRowSelected(int var1) {
  925.       return this.selectionModel.isSelectedIndex(var1);
  926.    }
  927.  
  928.    public boolean isColumnSelected(int var1) {
  929.       return this.columnModel.getSelectionModel().isSelectedIndex(var1);
  930.    }
  931.  
  932.    public boolean isCellSelected(int var1, int var2) {
  933.       if (!this.getRowSelectionAllowed() && !this.getColumnSelectionAllowed()) {
  934.          return false;
  935.       } else {
  936.          return (!this.getRowSelectionAllowed() || this.isRowSelected(var1)) && (!this.getColumnSelectionAllowed() || this.isColumnSelected(var2));
  937.       }
  938.    }
  939.  
  940.    private void changeSelectionModel(ListSelectionModel var1, int var2, boolean var3, boolean var4, boolean var5, int var6, boolean var7) {
  941.       if (var4) {
  942.          if (var3) {
  943.             if (var7) {
  944.                var1.addSelectionInterval(var6, var2);
  945.             } else {
  946.                var1.removeSelectionInterval(var6, var2);
  947.                if (Boolean.TRUE == this.getClientProperty("Table.isFileList")) {
  948.                   var1.addSelectionInterval(var2, var2);
  949.                   var1.setAnchorSelectionIndex(var6);
  950.                }
  951.             }
  952.          } else {
  953.             var1.setSelectionInterval(var6, var2);
  954.          }
  955.       } else if (var3) {
  956.          if (var5) {
  957.             var1.removeSelectionInterval(var2, var2);
  958.          } else {
  959.             var1.addSelectionInterval(var2, var2);
  960.          }
  961.       } else {
  962.          var1.setSelectionInterval(var2, var2);
  963.       }
  964.  
  965.    }
  966.  
  967.    public void changeSelection(int var1, int var2, boolean var3, boolean var4) {
  968.       ListSelectionModel var5 = this.getSelectionModel();
  969.       ListSelectionModel var6 = this.getColumnModel().getSelectionModel();
  970.       int var7 = this.getAdjustedIndex(var5.getAnchorSelectionIndex(), true);
  971.       int var8 = this.getAdjustedIndex(var6.getAnchorSelectionIndex(), false);
  972.       boolean var9 = true;
  973.       if (var7 == -1) {
  974.          var7 = 0;
  975.          var9 = false;
  976.       }
  977.  
  978.       if (var8 == -1) {
  979.          var8 = 0;
  980.          var9 = false;
  981.       }
  982.  
  983.       boolean var10 = this.isCellSelected(var1, var2);
  984.       var9 = var9 && this.isCellSelected(var7, var8);
  985.       this.changeSelectionModel(var6, var2, var3, var4, var10, var8, var9);
  986.       this.changeSelectionModel(var5, var1, var3, var4, var10, var7, var9);
  987.       if (this.getAutoscrolls()) {
  988.          Rectangle var11 = this.getCellRect(var1, var2, false);
  989.          if (var11 != null) {
  990.             this.scrollRectToVisible(var11);
  991.          }
  992.       }
  993.  
  994.    }
  995.  
  996.    public Color getSelectionForeground() {
  997.       return this.selectionForeground;
  998.    }
  999.  
  1000.    public void setSelectionForeground(Color var1) {
  1001.       Color var2 = this.selectionForeground;
  1002.       this.selectionForeground = var1;
  1003.       this.firePropertyChange("selectionForeground", var2, var1);
  1004.       if (!var1.equals(var2)) {
  1005.          this.repaint();
  1006.       }
  1007.  
  1008.    }
  1009.  
  1010.    public Color getSelectionBackground() {
  1011.       return this.selectionBackground;
  1012.    }
  1013.  
  1014.    public void setSelectionBackground(Color var1) {
  1015.       Color var2 = this.selectionBackground;
  1016.       this.selectionBackground = var1;
  1017.       this.firePropertyChange("selectionBackground", var2, var1);
  1018.       if (!var1.equals(var2)) {
  1019.          this.repaint();
  1020.       }
  1021.  
  1022.    }
  1023.  
  1024.    public TableColumn getColumn(Object var1) {
  1025.       TableColumnModel var2 = this.getColumnModel();
  1026.       int var3 = var2.getColumnIndex(var1);
  1027.       return var2.getColumn(var3);
  1028.    }
  1029.  
  1030.    public int convertColumnIndexToModel(int var1) {
  1031.       return var1 < 0 ? var1 : this.getColumnModel().getColumn(var1).getModelIndex();
  1032.    }
  1033.  
  1034.    public int convertColumnIndexToView(int var1) {
  1035.       if (var1 < 0) {
  1036.          return var1;
  1037.       } else {
  1038.          TableColumnModel var2 = this.getColumnModel();
  1039.  
  1040.          for(int var3 = 0; var3 < this.getColumnCount(); ++var3) {
  1041.             if (var2.getColumn(var3).getModelIndex() == var1) {
  1042.                return var3;
  1043.             }
  1044.          }
  1045.  
  1046.          return -1;
  1047.       }
  1048.    }
  1049.  
  1050.    public int convertRowIndexToView(int var1) {
  1051.       RowSorter var2 = this.getRowSorter();
  1052.       return var2 != null ? var2.convertRowIndexToView(var1) : var1;
  1053.    }
  1054.  
  1055.    public int convertRowIndexToModel(int var1) {
  1056.       RowSorter var2 = this.getRowSorter();
  1057.       return var2 != null ? var2.convertRowIndexToModel(var1) : var1;
  1058.    }
  1059.  
  1060.    public int getRowCount() {
  1061.       RowSorter var1 = this.getRowSorter();
  1062.       return var1 != null ? var1.getViewRowCount() : this.getModel().getRowCount();
  1063.    }
  1064.  
  1065.    public int getColumnCount() {
  1066.       return this.getColumnModel().getColumnCount();
  1067.    }
  1068.  
  1069.    public String getColumnName(int var1) {
  1070.       return this.getModel().getColumnName(this.convertColumnIndexToModel(var1));
  1071.    }
  1072.  
  1073.    public Class<?> getColumnClass(int var1) {
  1074.       return this.getModel().getColumnClass(this.convertColumnIndexToModel(var1));
  1075.    }
  1076.  
  1077.    public Object getValueAt(int var1, int var2) {
  1078.       return this.getModel().getValueAt(this.convertRowIndexToModel(var1), this.convertColumnIndexToModel(var2));
  1079.    }
  1080.  
  1081.    public void setValueAt(Object var1, int var2, int var3) {
  1082.       this.getModel().setValueAt(var1, this.convertRowIndexToModel(var2), this.convertColumnIndexToModel(var3));
  1083.    }
  1084.  
  1085.    public boolean isCellEditable(int var1, int var2) {
  1086.       return this.getModel().isCellEditable(this.convertRowIndexToModel(var1), this.convertColumnIndexToModel(var2));
  1087.    }
  1088.  
  1089.    public void addColumn(TableColumn var1) {
  1090.       if (var1.getHeaderValue() == null) {
  1091.          int var2 = var1.getModelIndex();
  1092.          String var3 = this.getModel().getColumnName(var2);
  1093.          var1.setHeaderValue(var3);
  1094.       }
  1095.  
  1096.       this.getColumnModel().addColumn(var1);
  1097.    }
  1098.  
  1099.    public void removeColumn(TableColumn var1) {
  1100.       this.getColumnModel().removeColumn(var1);
  1101.    }
  1102.  
  1103.    public void moveColumn(int var1, int var2) {
  1104.       this.getColumnModel().moveColumn(var1, var2);
  1105.    }
  1106.  
  1107.    public int columnAtPoint(Point var1) {
  1108.       int var2 = var1.x;
  1109.       if (!this.getComponentOrientation().isLeftToRight()) {
  1110.          var2 = this.getWidth() - var2;
  1111.       }
  1112.  
  1113.       return this.getColumnModel().getColumnIndexAtX(var2);
  1114.    }
  1115.  
  1116.    public int rowAtPoint(Point var1) {
  1117.       int var2 = var1.y;
  1118.       int var3 = this.rowModel == null ? var2 / this.getRowHeight() : this.rowModel.getIndex(var2);
  1119.       if (var3 < 0) {
  1120.          return -1;
  1121.       } else {
  1122.          return var3 >= this.getRowCount() ? -1 : var3;
  1123.       }
  1124.    }
  1125.  
  1126.    public Rectangle getCellRect(int var1, int var2, boolean var3) {
  1127.       Rectangle var4 = new Rectangle();
  1128.       boolean var5 = true;
  1129.       if (var1 < 0) {
  1130.          var5 = false;
  1131.       } else if (var1 >= this.getRowCount()) {
  1132.          var4.y = this.getHeight();
  1133.          var5 = false;
  1134.       } else {
  1135.          var4.height = this.getRowHeight(var1);
  1136.          var4.y = this.rowModel == null ? var1 * var4.height : this.rowModel.getPosition(var1);
  1137.       }
  1138.  
  1139.       if (var2 < 0) {
  1140.          if (!this.getComponentOrientation().isLeftToRight()) {
  1141.             var4.x = this.getWidth();
  1142.          }
  1143.  
  1144.          var5 = false;
  1145.       } else if (var2 >= this.getColumnCount()) {
  1146.          if (this.getComponentOrientation().isLeftToRight()) {
  1147.             var4.x = this.getWidth();
  1148.          }
  1149.  
  1150.          var5 = false;
  1151.       } else {
  1152.          TableColumnModel var6 = this.getColumnModel();
  1153.          if (this.getComponentOrientation().isLeftToRight()) {
  1154.             for(int var9 = 0; var9 < var2; ++var9) {
  1155.                var4.x += var6.getColumn(var9).getWidth();
  1156.             }
  1157.          } else {
  1158.             for(int var7 = var6.getColumnCount() - 1; var7 > var2; --var7) {
  1159.                var4.x += var6.getColumn(var7).getWidth();
  1160.             }
  1161.          }
  1162.  
  1163.          var4.width = var6.getColumn(var2).getWidth();
  1164.       }
  1165.  
  1166.       if (var5 && !var3) {
  1167.          int var8 = Math.min(this.getRowMargin(), var4.height);
  1168.          int var10 = Math.min(this.getColumnModel().getColumnMargin(), var4.width);
  1169.          var4.setBounds(var4.x + var10 / 2, var4.y + var8 / 2, var4.width - var10, var4.height - var8);
  1170.       }
  1171.  
  1172.       return var4;
  1173.    }
  1174.  
  1175.    private int viewIndexForColumn(TableColumn var1) {
  1176.       TableColumnModel var2 = this.getColumnModel();
  1177.  
  1178.       for(int var3 = 0; var3 < var2.getColumnCount(); ++var3) {
  1179.          if (var2.getColumn(var3) == var1) {
  1180.             return var3;
  1181.          }
  1182.       }
  1183.  
  1184.       return -1;
  1185.    }
  1186.  
  1187.    public void doLayout() {
  1188.       TableColumn var1 = this.getResizingColumn();
  1189.       if (var1 == null) {
  1190.          this.setWidthsFromPreferredWidths(false);
  1191.       } else {
  1192.          int var2 = this.viewIndexForColumn(var1);
  1193.          int var3 = this.getWidth() - this.getColumnModel().getTotalColumnWidth();
  1194.          this.accommodateDelta(var2, var3);
  1195.          var3 = this.getWidth() - this.getColumnModel().getTotalColumnWidth();
  1196.          if (var3 != 0) {
  1197.             var1.setWidth(var1.getWidth() + var3);
  1198.          }
  1199.  
  1200.          this.setWidthsFromPreferredWidths(true);
  1201.       }
  1202.  
  1203.       super.doLayout();
  1204.    }
  1205.  
  1206.    private TableColumn getResizingColumn() {
  1207.       return this.tableHeader == null ? null : this.tableHeader.getResizingColumn();
  1208.    }
  1209.  
  1210.    /** @deprecated */
  1211.    @Deprecated
  1212.    public void sizeColumnsToFit(boolean var1) {
  1213.       int var2 = this.autoResizeMode;
  1214.       this.setAutoResizeMode(var1 ? 3 : 4);
  1215.       this.sizeColumnsToFit(-1);
  1216.       this.setAutoResizeMode(var2);
  1217.    }
  1218.  
  1219.    public void sizeColumnsToFit(int var1) {
  1220.       if (var1 == -1) {
  1221.          this.setWidthsFromPreferredWidths(false);
  1222.       } else if (this.autoResizeMode == 0) {
  1223.          TableColumn var2 = this.getColumnModel().getColumn(var1);
  1224.          var2.setPreferredWidth(var2.getWidth());
  1225.       } else {
  1226.          int var3 = this.getWidth() - this.getColumnModel().getTotalColumnWidth();
  1227.          this.accommodateDelta(var1, var3);
  1228.          this.setWidthsFromPreferredWidths(true);
  1229.       }
  1230.  
  1231.    }
  1232.  
  1233.    private void setWidthsFromPreferredWidths(boolean var1) {
  1234.       int var2 = this.getWidth();
  1235.       int var3 = this.getPreferredSize().width;
  1236.       int var4 = !var1 ? var2 : var3;
  1237.       TableColumnModel var5 = this.columnModel;
  1238.       2 var6 = new 2(this, var5, var1);
  1239.       this.adjustSizes((long)var4, (Resizable3)var6, var1);
  1240.    }
  1241.  
  1242.    private void accommodateDelta(int var1, int var2) {
  1243.       int var3 = this.getColumnCount();
  1244.       int var4;
  1245.       int var5;
  1246.       switch (this.autoResizeMode) {
  1247.          case 1:
  1248.             var4 = var1 + 1;
  1249.             var5 = Math.min(var4 + 1, var3);
  1250.             break;
  1251.          case 2:
  1252.             var4 = var1 + 1;
  1253.             var5 = var3;
  1254.             break;
  1255.          case 3:
  1256.             var4 = var3 - 1;
  1257.             var5 = var4 + 1;
  1258.             break;
  1259.          case 4:
  1260.             var4 = 0;
  1261.             var5 = var3;
  1262.             break;
  1263.          default:
  1264.             return;
  1265.       }
  1266.  
  1267.       TableColumnModel var8 = this.columnModel;
  1268.       3 var9 = new 3(this, var5, var4, var8);
  1269.       int var10 = 0;
  1270.  
  1271.       for(int var11 = var4; var11 < var5; ++var11) {
  1272.          TableColumn var12 = this.columnModel.getColumn(var11);
  1273.          int var13 = var12.getWidth();
  1274.          var10 += var13;
  1275.       }
  1276.  
  1277.       this.adjustSizes((long)(var10 + var2), (Resizable3)var9, false);
  1278.    }
  1279.  
  1280.    private void adjustSizes(long var1, Resizable3 var3, boolean var4) {
  1281.       int var5 = var3.getElementCount();
  1282.       long var6 = 0L;
  1283.  
  1284.       for(int var8 = 0; var8 < var5; ++var8) {
  1285.          var6 += (long)var3.getMidPointAt(var8);
  1286.       }
  1287.  
  1288.       Object var9;
  1289.       if (var1 < var6 == !var4) {
  1290.          var9 = new 4(this, var3);
  1291.       } else {
  1292.          var9 = new 5(this, var3);
  1293.       }
  1294.  
  1295.       this.adjustSizes(var1, (Resizable2)var9, !var4);
  1296.    }
  1297.  
  1298.    private void adjustSizes(long var1, Resizable2 var3, boolean var4) {
  1299.       long var5 = 0L;
  1300.       long var7 = 0L;
  1301.  
  1302.       for(int var9 = 0; var9 < var3.getElementCount(); ++var9) {
  1303.          var5 += (long)var3.getLowerBoundAt(var9);
  1304.          var7 += (long)var3.getUpperBoundAt(var9);
  1305.       }
  1306.  
  1307.       if (var4) {
  1308.          var1 = Math.min(Math.max(var5, var1), var7);
  1309.       }
  1310.  
  1311.       for(int var15 = 0; var15 < var3.getElementCount(); ++var15) {
  1312.          int var10 = var3.getLowerBoundAt(var15);
  1313.          int var11 = var3.getUpperBoundAt(var15);
  1314.          int var12;
  1315.          if (var5 == var7) {
  1316.             var12 = var10;
  1317.          } else {
  1318.             double var13 = (double)(var1 - var5) / (double)(var7 - var5);
  1319.             var12 = (int)Math.round((double)var10 + var13 * (double)(var11 - var10));
  1320.          }
  1321.  
  1322.          var3.setSizeAt(var12, var15);
  1323.          var1 -= (long)var12;
  1324.          var5 -= (long)var10;
  1325.          var7 -= (long)var11;
  1326.       }
  1327.  
  1328.    }
  1329.  
  1330.    public String getToolTipText(MouseEvent var1) {
  1331.       String var2 = null;
  1332.       Point var3 = var1.getPoint();
  1333.       int var4 = this.columnAtPoint(var3);
  1334.       int var5 = this.rowAtPoint(var3);
  1335.       if (var4 != -1 && var5 != -1) {
  1336.          TableCellRenderer var6 = this.getCellRenderer(var5, var4);
  1337.          Component var7 = this.prepareRenderer(var6, var5, var4);
  1338.          if (var7 instanceof JComponent) {
  1339.             Rectangle var8 = this.getCellRect(var5, var4, false);
  1340.             var3.translate(-var8.x, -var8.y);
  1341.             MouseEvent var9 = new MouseEvent(var7, var1.getID(), var1.getWhen(), var1.getModifiers(), var3.x, var3.y, var1.getXOnScreen(), var1.getYOnScreen(), var1.getClickCount(), var1.isPopupTrigger(), 0);
  1342.             var2 = ((JComponent)var7).getToolTipText(var9);
  1343.          }
  1344.       }
  1345.  
  1346.       if (var2 == null) {
  1347.          var2 = this.getToolTipText();
  1348.       }
  1349.  
  1350.       return var2;
  1351.    }
  1352.  
  1353.    public void setSurrendersFocusOnKeystroke(boolean var1) {
  1354.       this.surrendersFocusOnKeystroke = var1;
  1355.    }
  1356.  
  1357.    public boolean getSurrendersFocusOnKeystroke() {
  1358.       return this.surrendersFocusOnKeystroke;
  1359.    }
  1360.  
  1361.    public boolean editCellAt(int var1, int var2) {
  1362.       return this.editCellAt(var1, var2, (EventObject)null);
  1363.    }
  1364.  
  1365.    public boolean editCellAt(int var1, int var2, EventObject var3) {
  1366.       if (this.cellEditor != null && !this.cellEditor.stopCellEditing()) {
  1367.          return false;
  1368.       } else if (var1 >= 0 && var1 < this.getRowCount() && var2 >= 0 && var2 < this.getColumnCount()) {
  1369.          if (!this.isCellEditable(var1, var2)) {
  1370.             return false;
  1371.          } else {
  1372.             if (this.editorRemover == null) {
  1373.                KeyboardFocusManager var4 = KeyboardFocusManager.getCurrentKeyboardFocusManager();
  1374.                this.editorRemover = new CellEditorRemover(this, var4);
  1375.                var4.addPropertyChangeListener("permanentFocusOwner", this.editorRemover);
  1376.             }
  1377.  
  1378.             TableCellEditor var5 = this.getCellEditor(var1, var2);
  1379.             if (var5 != null && var5.isCellEditable(var3)) {
  1380.                this.editorComp = this.prepareEditor(var5, var1, var2);
  1381.                if (this.editorComp == null) {
  1382.                   this.removeEditor();
  1383.                   return false;
  1384.                } else {
  1385.                   this.editorComp.setBounds(this.getCellRect(var1, var2, false));
  1386.                   this.add(this.editorComp);
  1387.                   this.editorComp.validate();
  1388.                   this.editorComp.repaint();
  1389.                   this.setCellEditor(var5);
  1390.                   this.setEditingRow(var1);
  1391.                   this.setEditingColumn(var2);
  1392.                   var5.addCellEditorListener(this);
  1393.                   return true;
  1394.                }
  1395.             } else {
  1396.                return false;
  1397.             }
  1398.          }
  1399.       } else {
  1400.          return false;
  1401.       }
  1402.    }
  1403.  
  1404.    public boolean isEditing() {
  1405.       return this.cellEditor != null;
  1406.    }
  1407.  
  1408.    public Component getEditorComponent() {
  1409.       return this.editorComp;
  1410.    }
  1411.  
  1412.    public int getEditingColumn() {
  1413.       return this.editingColumn;
  1414.    }
  1415.  
  1416.    public int getEditingRow() {
  1417.       return this.editingRow;
  1418.    }
  1419.  
  1420.    public TableUI getUI() {
  1421.       return (TableUI)this.ui;
  1422.    }
  1423.  
  1424.    public void setUI(TableUI var1) {
  1425.       if (this.ui != var1) {
  1426.          super.setUI(var1);
  1427.          this.repaint();
  1428.       }
  1429.  
  1430.    }
  1431.  
  1432.    private void updateSubComponentUI(Object var1) {
  1433.       if (var1 != null) {
  1434.          Component var2 = null;
  1435.          if (var1 instanceof Component) {
  1436.             var2 = (Component)var1;
  1437.          }
  1438.  
  1439.          if (var1 instanceof DefaultCellEditor) {
  1440.             var2 = ((DefaultCellEditor)var1).getComponent();
  1441.          }
  1442.  
  1443.          if (var2 != null) {
  1444.             SwingUtilities.updateComponentTreeUI(var2);
  1445.          }
  1446.  
  1447.       }
  1448.    }
  1449.  
  1450.    public void updateUI() {
  1451.       TableColumnModel var1 = this.getColumnModel();
  1452.  
  1453.       for(int var2 = 0; var2 < var1.getColumnCount(); ++var2) {
  1454.          TableColumn var3 = var1.getColumn(var2);
  1455.          this.updateSubComponentUI(var3.getCellRenderer());
  1456.          this.updateSubComponentUI(var3.getCellEditor());
  1457.          this.updateSubComponentUI(var3.getHeaderRenderer());
  1458.       }
  1459.  
  1460.       Enumeration var4 = this.defaultRenderersByColumnClass.elements();
  1461.  
  1462.       while(var4.hasMoreElements()) {
  1463.          this.updateSubComponentUI(var4.nextElement());
  1464.       }
  1465.  
  1466.       Enumeration var5 = this.defaultEditorsByColumnClass.elements();
  1467.  
  1468.       while(var5.hasMoreElements()) {
  1469.          this.updateSubComponentUI(var5.nextElement());
  1470.       }
  1471.  
  1472.       if (this.tableHeader != null && this.tableHeader.getParent() == null) {
  1473.          this.tableHeader.updateUI();
  1474.       }
  1475.  
  1476.       this.setUI((TableUI)UIManager.getUI(this));
  1477.    }
  1478.  
  1479.    public String getUIClassID() {
  1480.       return "TableUI";
  1481.    }
  1482.  
  1483.    public void setModel(TableModel var1) {
  1484.       if (var1 == null) {
  1485.          throw new IllegalArgumentException("Cannot set a null TableModel");
  1486.       } else {
  1487.          if (this.dataModel != var1) {
  1488.             TableModel var2 = this.dataModel;
  1489.             if (var2 != null) {
  1490.                var2.removeTableModelListener(this);
  1491.             }
  1492.  
  1493.             this.dataModel = var1;
  1494.             var1.addTableModelListener(this);
  1495.             this.tableChanged(new TableModelEvent(var1, -1));
  1496.             this.firePropertyChange("model", var2, var1);
  1497.             if (this.getAutoCreateRowSorter()) {
  1498.                this.setRowSorter(new TableRowSorter(var1));
  1499.             }
  1500.          }
  1501.  
  1502.       }
  1503.    }
  1504.  
  1505.    public TableModel getModel() {
  1506.       return this.dataModel;
  1507.    }
  1508.  
  1509.    public void setColumnModel(TableColumnModel var1) {
  1510.       if (var1 == null) {
  1511.          throw new IllegalArgumentException("Cannot set a null ColumnModel");
  1512.       } else {
  1513.          TableColumnModel var2 = this.columnModel;
  1514.          if (var1 != var2) {
  1515.             if (var2 != null) {
  1516.                var2.removeColumnModelListener(this);
  1517.             }
  1518.  
  1519.             this.columnModel = var1;
  1520.             var1.addColumnModelListener(this);
  1521.             if (this.tableHeader != null) {
  1522.                this.tableHeader.setColumnModel(var1);
  1523.             }
  1524.  
  1525.             this.firePropertyChange("columnModel", var2, var1);
  1526.             this.resizeAndRepaint();
  1527.          }
  1528.  
  1529.       }
  1530.    }
  1531.  
  1532.    public TableColumnModel getColumnModel() {
  1533.       return this.columnModel;
  1534.    }
  1535.  
  1536.    public void setSelectionModel(ListSelectionModel var1) {
  1537.       if (var1 == null) {
  1538.          throw new IllegalArgumentException("Cannot set a null SelectionModel");
  1539.       } else {
  1540.          ListSelectionModel var2 = this.selectionModel;
  1541.          if (var1 != var2) {
  1542.             if (var2 != null) {
  1543.                var2.removeListSelectionListener(this);
  1544.             }
  1545.  
  1546.             this.selectionModel = var1;
  1547.             var1.addListSelectionListener(this);
  1548.             this.firePropertyChange("selectionModel", var2, var1);
  1549.             this.repaint();
  1550.          }
  1551.  
  1552.       }
  1553.    }
  1554.  
  1555.    public ListSelectionModel getSelectionModel() {
  1556.       return this.selectionModel;
  1557.    }
  1558.  
  1559.    public void sorterChanged(RowSorterEvent var1) {
  1560.       if (var1.getType() == Type.SORT_ORDER_CHANGED) {
  1561.          JTableHeader var2 = this.getTableHeader();
  1562.          if (var2 != null) {
  1563.             var2.repaint();
  1564.          }
  1565.       } else if (var1.getType() == Type.SORTED) {
  1566.          this.sorterChanged = true;
  1567.          if (!this.ignoreSortChange) {
  1568.             this.sortedTableChanged(var1, (TableModelEvent)null);
  1569.          }
  1570.       }
  1571.  
  1572.    }
  1573.  
  1574.    private void sortedTableChanged(RowSorterEvent var1, TableModelEvent var2) {
  1575.       int var3 = -1;
  1576.       ModelChange var4 = var2 != null ? new ModelChange(this, var2) : null;
  1577.       if ((var4 == null || !var4.allRowsChanged) && this.editingRow != -1) {
  1578.          var3 = this.convertRowIndexToModel(var1, this.editingRow);
  1579.       }
  1580.  
  1581.       this.sortManager.prepareForChange(var1, var4);
  1582.       if (var2 != null) {
  1583.          if (var4.type == 0) {
  1584.             this.repaintSortedRows(var4);
  1585.          }
  1586.  
  1587.          this.notifySorter(var4);
  1588.          if (var4.type != 0) {
  1589.             this.sorterChanged = true;
  1590.          }
  1591.       } else {
  1592.          this.sorterChanged = true;
  1593.       }
  1594.  
  1595.       this.sortManager.processChange(var1, var4, this.sorterChanged);
  1596.       if (this.sorterChanged) {
  1597.          if (this.editingRow != -1) {
  1598.             int var5 = var3 == -1 ? -1 : this.convertRowIndexToView(var3, var4);
  1599.             this.restoreSortingEditingRow(var5);
  1600.          }
  1601.  
  1602.          if (var2 == null || var4.type != 0) {
  1603.             this.resizeAndRepaint();
  1604.          }
  1605.       }
  1606.  
  1607.       if (var4 != null && var4.allRowsChanged) {
  1608.          this.clearSelectionAndLeadAnchor();
  1609.          this.resizeAndRepaint();
  1610.       }
  1611.  
  1612.    }
  1613.  
  1614.    private void repaintSortedRows(ModelChange var1) {
  1615.       if (var1.startModelIndex <= var1.endModelIndex && var1.startModelIndex + 10 >= var1.endModelIndex) {
  1616.          int var2 = var1.event.getColumn();
  1617.          int var3;
  1618.          if (var2 == -1) {
  1619.             var3 = 0;
  1620.          } else {
  1621.             var3 = this.convertColumnIndexToView(var2);
  1622.             if (var3 == -1) {
  1623.                return;
  1624.             }
  1625.          }
  1626.  
  1627.          int var4 = var1.startModelIndex;
  1628.  
  1629.          while(var4 <= var1.endModelIndex) {
  1630.             int var5 = this.convertRowIndexToView(var4++);
  1631.             if (var5 != -1) {
  1632.                Rectangle var6 = this.getCellRect(var5, var3, false);
  1633.                int var7 = var6.x;
  1634.                int var8 = var6.width;
  1635.                if (var2 == -1) {
  1636.                   var7 = 0;
  1637.                   var8 = this.getWidth();
  1638.                }
  1639.  
  1640.                this.repaint(var7, var6.y, var8, var6.height);
  1641.             }
  1642.          }
  1643.  
  1644.       } else {
  1645.          this.repaint();
  1646.       }
  1647.    }
  1648.  
  1649.    private void restoreSortingSelection(int[] var1, int var2, ModelChange var3) {
  1650.       for(int var4 = var1.length - 1; var4 >= 0; --var4) {
  1651.          var1[var4] = this.convertRowIndexToView(var1[var4], var3);
  1652.       }
  1653.  
  1654.       var2 = this.convertRowIndexToView(var2, var3);
  1655.       if (var1.length != 0 && (var1.length != 1 || var1[0] != this.getSelectedRow())) {
  1656.          this.selectionModel.setValueIsAdjusting(true);
  1657.          this.selectionModel.clearSelection();
  1658.  
  1659.          for(int var6 = var1.length - 1; var6 >= 0; --var6) {
  1660.             if (var1[var6] != -1) {
  1661.                this.selectionModel.addSelectionInterval(var1[var6], var1[var6]);
  1662.             }
  1663.          }
  1664.  
  1665.          SwingUtilities2.setLeadAnchorWithoutSelection(this.selectionModel, var2, var2);
  1666.          this.selectionModel.setValueIsAdjusting(false);
  1667.       }
  1668.    }
  1669.  
  1670.    private void restoreSortingEditingRow(int var1) {
  1671.       if (var1 == -1) {
  1672.          TableCellEditor var2 = this.getCellEditor();
  1673.          if (var2 != null) {
  1674.             var2.cancelCellEditing();
  1675.             if (this.getCellEditor() != null) {
  1676.                this.removeEditor();
  1677.             }
  1678.          }
  1679.       } else {
  1680.          this.editingRow = var1;
  1681.          this.repaint();
  1682.       }
  1683.  
  1684.    }
  1685.  
  1686.    private void notifySorter(ModelChange var1) {
  1687.       try {
  1688.          this.ignoreSortChange = true;
  1689.          this.sorterChanged = false;
  1690.          switch (var1.type) {
  1691.             case -1:
  1692.                this.sortManager.sorter.rowsDeleted(var1.startModelIndex, var1.endModelIndex);
  1693.                break;
  1694.             case 0:
  1695.                if (var1.event.getLastRow() == Integer.MAX_VALUE) {
  1696.                   this.sortManager.sorter.allRowsChanged();
  1697.                } else if (var1.event.getColumn() == -1) {
  1698.                   this.sortManager.sorter.rowsUpdated(var1.startModelIndex, var1.endModelIndex);
  1699.                } else {
  1700.                   this.sortManager.sorter.rowsUpdated(var1.startModelIndex, var1.endModelIndex, var1.event.getColumn());
  1701.                }
  1702.                break;
  1703.             case 1:
  1704.                this.sortManager.sorter.rowsInserted(var1.startModelIndex, var1.endModelIndex);
  1705.          }
  1706.       } finally {
  1707.          this.ignoreSortChange = false;
  1708.       }
  1709.  
  1710.    }
  1711.  
  1712.    private int convertRowIndexToView(int var1, ModelChange var2) {
  1713.       if (var1 < 0) {
  1714.          return -1;
  1715.       } else {
  1716.          if (var2 != null && var1 >= var2.startModelIndex) {
  1717.             if (var2.type == 1) {
  1718.                if (var1 + var2.length >= var2.modelRowCount) {
  1719.                   return -1;
  1720.                }
  1721.  
  1722.                return this.sortManager.sorter.convertRowIndexToView(var1 + var2.length);
  1723.             }
  1724.  
  1725.             if (var2.type == -1) {
  1726.                if (var1 <= var2.endModelIndex) {
  1727.                   return -1;
  1728.                }
  1729.  
  1730.                if (var1 - var2.length >= var2.modelRowCount) {
  1731.                   return -1;
  1732.                }
  1733.  
  1734.                return this.sortManager.sorter.convertRowIndexToView(var1 - var2.length);
  1735.             }
  1736.          }
  1737.  
  1738.          return var1 >= this.getModel().getRowCount() ? -1 : this.sortManager.sorter.convertRowIndexToView(var1);
  1739.       }
  1740.    }
  1741.  
  1742.    private int[] convertSelectionToModel(RowSorterEvent var1) {
  1743.       int[] var2 = this.getSelectedRows();
  1744.  
  1745.       for(int var3 = var2.length - 1; var3 >= 0; --var3) {
  1746.          var2[var3] = this.convertRowIndexToModel(var1, var2[var3]);
  1747.       }
  1748.  
  1749.       return var2;
  1750.    }
  1751.  
  1752.    private int convertRowIndexToModel(RowSorterEvent var1, int var2) {
  1753.       if (var1 != null) {
  1754.          return var1.getPreviousRowCount() == 0 ? var2 : var1.convertPreviousRowIndexToModel(var2);
  1755.       } else {
  1756.          return var2 >= 0 && var2 < this.getRowCount() ? this.convertRowIndexToModel(var2) : -1;
  1757.       }
  1758.    }
  1759.  
  1760.    public void tableChanged(TableModelEvent var1) {
  1761.       if (var1 != null && var1.getFirstRow() != -1) {
  1762.          if (this.sortManager != null) {
  1763.             this.sortedTableChanged((RowSorterEvent)null, var1);
  1764.          } else {
  1765.             if (this.rowModel != null) {
  1766.                this.repaint();
  1767.             }
  1768.  
  1769.             if (var1.getType() == 1) {
  1770.                this.tableRowsInserted(var1);
  1771.             } else if (var1.getType() == -1) {
  1772.                this.tableRowsDeleted(var1);
  1773.             } else {
  1774.                int var2 = var1.getColumn();
  1775.                int var3 = var1.getFirstRow();
  1776.                int var4 = var1.getLastRow();
  1777.                Rectangle var5;
  1778.                if (var2 == -1) {
  1779.                   var5 = new Rectangle(0, var3 * this.getRowHeight(), this.getColumnModel().getTotalColumnWidth(), 0);
  1780.                } else {
  1781.                   int var6 = this.convertColumnIndexToView(var2);
  1782.                   var5 = this.getCellRect(var3, var6, false);
  1783.                }
  1784.  
  1785.                if (var4 != Integer.MAX_VALUE) {
  1786.                   var5.height = (var4 - var3 + 1) * this.getRowHeight();
  1787.                   this.repaint(var5.x, var5.y, var5.width, var5.height);
  1788.                } else {
  1789.                   this.clearSelectionAndLeadAnchor();
  1790.                   this.resizeAndRepaint();
  1791.                   this.rowModel = null;
  1792.                }
  1793.  
  1794.             }
  1795.          }
  1796.       } else {
  1797.          this.clearSelectionAndLeadAnchor();
  1798.          this.rowModel = null;
  1799.          if (this.sortManager != null) {
  1800.             try {
  1801.                this.ignoreSortChange = true;
  1802.                this.sortManager.sorter.modelStructureChanged();
  1803.             } finally {
  1804.                this.ignoreSortChange = false;
  1805.             }
  1806.  
  1807.             this.sortManager.allChanged();
  1808.          }
  1809.  
  1810.          if (this.getAutoCreateColumnsFromModel()) {
  1811.             this.createDefaultColumnsFromModel();
  1812.          } else {
  1813.             this.resizeAndRepaint();
  1814.          }
  1815.       }
  1816.    }
  1817.  
  1818.    private void tableRowsInserted(TableModelEvent var1) {
  1819.       int var2 = var1.getFirstRow();
  1820.       int var3 = var1.getLastRow();
  1821.       if (var2 < 0) {
  1822.          var2 = 0;
  1823.       }
  1824.  
  1825.       if (var3 < 0) {
  1826.          var3 = this.getRowCount() - 1;
  1827.       }
  1828.  
  1829.       int var4 = var3 - var2 + 1;
  1830.       this.selectionModel.insertIndexInterval(var2, var4, true);
  1831.       if (this.rowModel != null) {
  1832.          this.rowModel.insertEntries(var2, var4, this.getRowHeight());
  1833.       }
  1834.  
  1835.       int var5 = this.getRowHeight();
  1836.       Rectangle var6 = new Rectangle(0, var2 * var5, this.getColumnModel().getTotalColumnWidth(), (this.getRowCount() - var2) * var5);
  1837.       this.revalidate();
  1838.       this.repaint(var6);
  1839.    }
  1840.  
  1841.    private void tableRowsDeleted(TableModelEvent var1) {
  1842.       int var2 = var1.getFirstRow();
  1843.       int var3 = var1.getLastRow();
  1844.       if (var2 < 0) {
  1845.          var2 = 0;
  1846.       }
  1847.  
  1848.       if (var3 < 0) {
  1849.          var3 = this.getRowCount() - 1;
  1850.       }
  1851.  
  1852.       int var4 = var3 - var2 + 1;
  1853.       int var5 = this.getRowCount() + var4;
  1854.       this.selectionModel.removeIndexInterval(var2, var3);
  1855.       if (this.rowModel != null) {
  1856.          this.rowModel.removeEntries(var2, var4);
  1857.       }
  1858.  
  1859.       int var6 = this.getRowHeight();
  1860.       Rectangle var7 = new Rectangle(0, var2 * var6, this.getColumnModel().getTotalColumnWidth(), (var5 - var2) * var6);
  1861.       this.revalidate();
  1862.       this.repaint(var7);
  1863.    }
  1864.  
  1865.    public void columnAdded(TableColumnModelEvent var1) {
  1866.       if (this.isEditing()) {
  1867.          this.removeEditor();
  1868.       }
  1869.  
  1870.       this.resizeAndRepaint();
  1871.    }
  1872.  
  1873.    public void columnRemoved(TableColumnModelEvent var1) {
  1874.       if (this.isEditing()) {
  1875.          this.removeEditor();
  1876.       }
  1877.  
  1878.       this.resizeAndRepaint();
  1879.    }
  1880.  
  1881.    public void columnMoved(TableColumnModelEvent var1) {
  1882.       if (this.isEditing()) {
  1883.          this.removeEditor();
  1884.       }
  1885.  
  1886.       this.repaint();
  1887.    }
  1888.  
  1889.    public void columnMarginChanged(ChangeEvent var1) {
  1890.       if (this.isEditing()) {
  1891.          this.removeEditor();
  1892.       }
  1893.  
  1894.       TableColumn var2 = this.getResizingColumn();
  1895.       if (var2 != null && this.autoResizeMode == 0) {
  1896.          var2.setPreferredWidth(var2.getWidth());
  1897.       }
  1898.  
  1899.       this.resizeAndRepaint();
  1900.    }
  1901.  
  1902.    private int limit(int var1, int var2, int var3) {
  1903.       return Math.min(var3, Math.max(var1, var2));
  1904.    }
  1905.  
  1906.    public void columnSelectionChanged(ListSelectionEvent var1) {
  1907.       boolean var2 = var1.getValueIsAdjusting();
  1908.       if (this.columnSelectionAdjusting && !var2) {
  1909.          this.columnSelectionAdjusting = false;
  1910.       } else {
  1911.          this.columnSelectionAdjusting = var2;
  1912.          if (this.getRowCount() > 0 && this.getColumnCount() > 0) {
  1913.             int var3 = this.limit(var1.getFirstIndex(), 0, this.getColumnCount() - 1);
  1914.             int var4 = this.limit(var1.getLastIndex(), 0, this.getColumnCount() - 1);
  1915.             int var5 = 0;
  1916.             int var6 = this.getRowCount() - 1;
  1917.             if (this.getRowSelectionAllowed()) {
  1918.                var5 = this.selectionModel.getMinSelectionIndex();
  1919.                var6 = this.selectionModel.getMaxSelectionIndex();
  1920.                int var7 = this.getAdjustedIndex(this.selectionModel.getLeadSelectionIndex(), true);
  1921.                if (var5 != -1 && var6 != -1) {
  1922.                   if (var7 != -1) {
  1923.                      var5 = Math.min(var5, var7);
  1924.                      var6 = Math.max(var6, var7);
  1925.                   }
  1926.                } else {
  1927.                   if (var7 == -1) {
  1928.                      return;
  1929.                   }
  1930.  
  1931.                   var6 = var7;
  1932.                   var5 = var7;
  1933.                }
  1934.             }
  1935.  
  1936.             Rectangle var10 = this.getCellRect(var5, var3, false);
  1937.             Rectangle var8 = this.getCellRect(var6, var4, false);
  1938.             Rectangle var9 = var10.union(var8);
  1939.             this.repaint(var9);
  1940.          }
  1941.       }
  1942.    }
  1943.  
  1944.    public void valueChanged(ListSelectionEvent var1) {
  1945.       if (this.sortManager != null) {
  1946.          this.sortManager.viewSelectionChanged(var1);
  1947.       }
  1948.  
  1949.       boolean var2 = var1.getValueIsAdjusting();
  1950.       if (this.rowSelectionAdjusting && !var2) {
  1951.          this.rowSelectionAdjusting = false;
  1952.       } else {
  1953.          this.rowSelectionAdjusting = var2;
  1954.          if (this.getRowCount() > 0 && this.getColumnCount() > 0) {
  1955.             int var3 = this.limit(var1.getFirstIndex(), 0, this.getRowCount() - 1);
  1956.             int var4 = this.limit(var1.getLastIndex(), 0, this.getRowCount() - 1);
  1957.             Rectangle var5 = this.getCellRect(var3, 0, false);
  1958.             Rectangle var6 = this.getCellRect(var4, this.getColumnCount() - 1, false);
  1959.             Rectangle var7 = var5.union(var6);
  1960.             this.repaint(var7);
  1961.          }
  1962.       }
  1963.    }
  1964.  
  1965.    public void editingStopped(ChangeEvent var1) {
  1966.       TableCellEditor var2 = this.getCellEditor();
  1967.       if (var2 != null) {
  1968.          Object var3 = var2.getCellEditorValue();
  1969.          this.setValueAt(var3, this.editingRow, this.editingColumn);
  1970.          this.removeEditor();
  1971.       }
  1972.  
  1973.    }
  1974.  
  1975.    public void editingCanceled(ChangeEvent var1) {
  1976.       this.removeEditor();
  1977.    }
  1978.  
  1979.    public void setPreferredScrollableViewportSize(Dimension var1) {
  1980.       this.preferredViewportSize = var1;
  1981.    }
  1982.  
  1983.    public Dimension getPreferredScrollableViewportSize() {
  1984.       return this.preferredViewportSize;
  1985.    }
  1986.  
  1987.    public int getScrollableUnitIncrement(Rectangle var1, int var2, int var3) {
  1988.       int var4 = this.getLeadingRow(var1);
  1989.       int var5 = this.getLeadingCol(var1);
  1990.       if (var2 == 1 && var4 < 0) {
  1991.          return this.getRowHeight();
  1992.       } else if (var2 == 0 && var5 < 0) {
  1993.          return 100;
  1994.       } else {
  1995.          Rectangle var6 = this.getCellRect(var4, var5, true);
  1996.          int var7 = this.leadingEdge(var1, var2);
  1997.          int var8 = this.leadingEdge(var6, var2);
  1998.          int var9;
  1999.          if (var2 == 1) {
  2000.             var9 = var6.height;
  2001.          } else {
  2002.             var9 = var6.width;
  2003.          }
  2004.  
  2005.          if (var7 == var8) {
  2006.             if (var3 >= 0) {
  2007.                return var9;
  2008.             } else {
  2009.                int var12 = 0;
  2010.                if (var2 == 1) {
  2011.                   do {
  2012.                      --var4;
  2013.                      if (var4 < 0) {
  2014.                         break;
  2015.                      }
  2016.  
  2017.                      var12 = this.getRowHeight(var4);
  2018.                   } while(var12 == 0);
  2019.                } else {
  2020.                   do {
  2021.                      --var5;
  2022.                      if (var5 < 0) {
  2023.                         break;
  2024.                      }
  2025.  
  2026.                      var12 = this.getCellRect(var4, var5, true).width;
  2027.                   } while(var12 == 0);
  2028.                }
  2029.  
  2030.                return var12;
  2031.             }
  2032.          } else {
  2033.             int var10 = Math.abs(var7 - var8);
  2034.             int var11 = var9 - var10;
  2035.             return var3 > 0 ? var11 : var10;
  2036.          }
  2037.       }
  2038.    }
  2039.  
  2040.    public int getScrollableBlockIncrement(Rectangle var1, int var2, int var3) {
  2041.       if (this.getRowCount() == 0) {
  2042.          if (1 == var2) {
  2043.             int var8 = this.getRowHeight();
  2044.             return var8 > 0 ? Math.max(var8, var1.height / var8 * var8) : var1.height;
  2045.          } else {
  2046.             return var1.width;
  2047.          }
  2048.       } else {
  2049.          if (null == this.rowModel && 1 == var2) {
  2050.             int var4 = this.rowAtPoint(var1.getLocation());
  2051.  
  2052.             assert var4 != -1;
  2053.  
  2054.             int var5 = this.columnAtPoint(var1.getLocation());
  2055.             Rectangle var6 = this.getCellRect(var4, var5, true);
  2056.             if (var6.y == var1.y) {
  2057.                int var7 = this.getRowHeight();
  2058.  
  2059.                assert var7 > 0;
  2060.  
  2061.                return Math.max(var7, var1.height / var7 * var7);
  2062.             }
  2063.          }
  2064.  
  2065.          return var3 < 0 ? this.getPreviousBlockIncrement(var1, var2) : this.getNextBlockIncrement(var1, var2);
  2066.       }
  2067.    }
  2068.  
  2069.    private int getPreviousBlockIncrement(Rectangle var1, int var2) {
  2070.       int var7 = this.leadingEdge(var1, var2);
  2071.       boolean var8 = this.getComponentOrientation().isLeftToRight();
  2072.       int var5;
  2073.       Point var6;
  2074.       if (var2 == 1) {
  2075.          var5 = var7 - var1.height;
  2076.          int var10 = var1.x + (var8 ? 0 : var1.width);
  2077.          var6 = new Point(var10, var5);
  2078.       } else if (var8) {
  2079.          var5 = var7 - var1.width;
  2080.          var6 = new Point(var5, var1.y);
  2081.       } else {
  2082.          var5 = var7 + var1.width;
  2083.          var6 = new Point(var5, var1.y);
  2084.       }
  2085.  
  2086.       int var3 = this.rowAtPoint(var6);
  2087.       int var4 = this.columnAtPoint(var6);
  2088.       int var9;
  2089.       if (var2 == 1 & var3 < 0) {
  2090.          var9 = 0;
  2091.       } else if (var2 == 0 & var4 < 0) {
  2092.          if (var8) {
  2093.             var9 = 0;
  2094.          } else {
  2095.             var9 = this.getWidth();
  2096.          }
  2097.       } else {
  2098.          Rectangle var13 = this.getCellRect(var3, var4, true);
  2099.          int var11 = this.leadingEdge(var13, var2);
  2100.          int var12 = this.trailingEdge(var13, var2);
  2101.          if ((var2 == 1 || var8) && var12 >= var7) {
  2102.             var9 = var11;
  2103.          } else if (var2 == 0 && !var8 && var12 <= var7) {
  2104.             var9 = var11;
  2105.          } else if (var5 == var11) {
  2106.             var9 = var11;
  2107.          } else {
  2108.             var9 = var12;
  2109.          }
  2110.       }
  2111.  
  2112.       return Math.abs(var7 - var9);
  2113.    }
  2114.  
  2115.    private int getNextBlockIncrement(Rectangle var1, int var2) {
  2116.       int var3 = this.getTrailingRow(var1);
  2117.       int var4 = this.getTrailingCol(var1);
  2118.       int var10 = this.leadingEdge(var1, var2);
  2119.       if (var2 == 1 && var3 < 0) {
  2120.          return var1.height;
  2121.       } else if (var2 == 0 && var4 < 0) {
  2122.          return var1.width;
  2123.       } else {
  2124.          Rectangle var5 = this.getCellRect(var3, var4, true);
  2125.          int var7 = this.leadingEdge(var5, var2);
  2126.          int var8 = this.trailingEdge(var5, var2);
  2127.          boolean var6;
  2128.          if (var2 != 1 && !this.getComponentOrientation().isLeftToRight()) {
  2129.             var6 = var7 >= var10;
  2130.          } else {
  2131.             var6 = var7 <= var10;
  2132.          }
  2133.  
  2134.          int var9;
  2135.          if (var6) {
  2136.             var9 = var8;
  2137.          } else if (var8 == this.trailingEdge(var1, var2)) {
  2138.             var9 = var8;
  2139.          } else {
  2140.             var9 = var7;
  2141.          }
  2142.  
  2143.          return Math.abs(var9 - var10);
  2144.       }
  2145.    }
  2146.  
  2147.    private int getLeadingRow(Rectangle var1) {
  2148.       Point var2;
  2149.       if (this.getComponentOrientation().isLeftToRight()) {
  2150.          var2 = new Point(var1.x, var1.y);
  2151.       } else {
  2152.          var2 = new Point(var1.x + var1.width, var1.y);
  2153.       }
  2154.  
  2155.       return this.rowAtPoint(var2);
  2156.    }
  2157.  
  2158.    private int getLeadingCol(Rectangle var1) {
  2159.       Point var2;
  2160.       if (this.getComponentOrientation().isLeftToRight()) {
  2161.          var2 = new Point(var1.x, var1.y);
  2162.       } else {
  2163.          var2 = new Point(var1.x + var1.width, var1.y);
  2164.       }
  2165.  
  2166.       return this.columnAtPoint(var2);
  2167.    }
  2168.  
  2169.    private int getTrailingRow(Rectangle var1) {
  2170.       Point var2;
  2171.       if (this.getComponentOrientation().isLeftToRight()) {
  2172.          var2 = new Point(var1.x, var1.y + var1.height - 1);
  2173.       } else {
  2174.          var2 = new Point(var1.x + var1.width, var1.y + var1.height - 1);
  2175.       }
  2176.  
  2177.       return this.rowAtPoint(var2);
  2178.    }
  2179.  
  2180.    private int getTrailingCol(Rectangle var1) {
  2181.       Point var2;
  2182.       if (this.getComponentOrientation().isLeftToRight()) {
  2183.          var2 = new Point(var1.x + var1.width - 1, var1.y);
  2184.       } else {
  2185.          var2 = new Point(var1.x, var1.y);
  2186.       }
  2187.  
  2188.       return this.columnAtPoint(var2);
  2189.    }
  2190.  
  2191.    private int leadingEdge(Rectangle var1, int var2) {
  2192.       if (var2 == 1) {
  2193.          return var1.y;
  2194.       } else {
  2195.          return this.getComponentOrientation().isLeftToRight() ? var1.x : var1.x + var1.width;
  2196.       }
  2197.    }
  2198.  
  2199.    private int trailingEdge(Rectangle var1, int var2) {
  2200.       if (var2 == 1) {
  2201.          return var1.y + var1.height;
  2202.       } else {
  2203.          return this.getComponentOrientation().isLeftToRight() ? var1.x + var1.width : var1.x;
  2204.       }
  2205.    }
  2206.  
  2207.    public boolean getScrollableTracksViewportWidth() {
  2208.       return this.autoResizeMode != 0;
  2209.    }
  2210.  
  2211.    public boolean getScrollableTracksViewportHeight() {
  2212.       return this.getFillsViewportHeight() && this.getParent() instanceof JViewport && ((JViewport)this.getParent()).getHeight() > this.getPreferredSize().height;
  2213.    }
  2214.  
  2215.    public void setFillsViewportHeight(boolean var1) {
  2216.       boolean var2 = this.fillsViewportHeight;
  2217.       this.fillsViewportHeight = var1;
  2218.       this.resizeAndRepaint();
  2219.       this.firePropertyChange("fillsViewportHeight", var2, var1);
  2220.    }
  2221.  
  2222.    public boolean getFillsViewportHeight() {
  2223.       return this.fillsViewportHeight;
  2224.    }
  2225.  
  2226.    protected boolean processKeyBinding(KeyStroke var1, KeyEvent var2, int var3, boolean var4) {
  2227.       boolean var5 = super.processKeyBinding(var1, var2, var3, var4);
  2228.       if (!var5 && var3 == 1 && this.isFocusOwner() && !Boolean.FALSE.equals((Boolean)this.getClientProperty("JTable.autoStartsEdit"))) {
  2229.          Component var6 = this.getEditorComponent();
  2230.          if (var6 == null) {
  2231.             if (var2 == null || var2.getID() != 401) {
  2232.                return false;
  2233.             }
  2234.  
  2235.             int var7 = var2.getKeyCode();
  2236.             if (var7 == 16 || var7 == 17 || var7 == 18) {
  2237.                return false;
  2238.             }
  2239.  
  2240.             int var8 = this.getSelectionModel().getLeadSelectionIndex();
  2241.             int var9 = this.getColumnModel().getSelectionModel().getLeadSelectionIndex();
  2242.             if (var8 != -1 && var9 != -1 && !this.isEditing() && !this.editCellAt(var8, var9, var2)) {
  2243.                return false;
  2244.             }
  2245.  
  2246.             var6 = this.getEditorComponent();
  2247.             if (var6 == null) {
  2248.                return false;
  2249.             }
  2250.          }
  2251.  
  2252.          if (var6 instanceof JComponent) {
  2253.             var5 = ((JComponent)var6).processKeyBinding(var1, var2, 0, var4);
  2254.             if (this.getSurrendersFocusOnKeystroke()) {
  2255.                var6.requestFocus();
  2256.             }
  2257.          }
  2258.       }
  2259.  
  2260.       return var5;
  2261.    }
  2262.  
  2263.    private void setLazyValue(Hashtable var1, Class var2, String var3) {
  2264.       var1.put(var2, new UIDefaults.ProxyLazyValue(var3));
  2265.    }
  2266.  
  2267.    private void setLazyRenderer(Class var1, String var2) {
  2268.       this.setLazyValue(this.defaultRenderersByColumnClass, var1, var2);
  2269.    }
  2270.  
  2271.    protected void createDefaultRenderers() {
  2272.       this.defaultRenderersByColumnClass = new UIDefaults(8, 0.75F);
  2273.       this.setLazyRenderer(Object.class, "javax.swing.table.DefaultTableCellRenderer$UIResource");
  2274.       this.setLazyRenderer(Number.class, "javax.swing.JTable$NumberRenderer");
  2275.       this.setLazyRenderer(Float.class, "javax.swing.JTable$DoubleRenderer");
  2276.       this.setLazyRenderer(Double.class, "javax.swing.JTable$DoubleRenderer");
  2277.       this.setLazyRenderer(Date.class, "javax.swing.JTable$DateRenderer");
  2278.       this.setLazyRenderer(Icon.class, "javax.swing.JTable$IconRenderer");
  2279.       this.setLazyRenderer(ImageIcon.class, "javax.swing.JTable$IconRenderer");
  2280.       this.setLazyRenderer(Boolean.class, "javax.swing.JTable$BooleanRenderer");
  2281.    }
  2282.  
  2283.    private void setLazyEditor(Class var1, String var2) {
  2284.       this.setLazyValue(this.defaultEditorsByColumnClass, var1, var2);
  2285.    }
  2286.  
  2287.    protected void createDefaultEditors() {
  2288.       this.defaultEditorsByColumnClass = new UIDefaults(3, 0.75F);
  2289.       this.setLazyEditor(Object.class, "javax.swing.JTable$GenericEditor");
  2290.       this.setLazyEditor(Number.class, "javax.swing.JTable$NumberEditor");
  2291.       this.setLazyEditor(Boolean.class, "javax.swing.JTable$BooleanEditor");
  2292.    }
  2293.  
  2294.    protected void initializeLocalVars() {
  2295.       this.updateSelectionOnSort = true;
  2296.       this.setOpaque(true);
  2297.       this.createDefaultRenderers();
  2298.       this.createDefaultEditors();
  2299.       this.setTableHeader(this.createDefaultTableHeader());
  2300.       this.setShowGrid(true);
  2301.       this.setAutoResizeMode(2);
  2302.       this.setRowHeight(16);
  2303.       this.isRowHeightSet = false;
  2304.       this.setRowMargin(1);
  2305.       this.setRowSelectionAllowed(true);
  2306.       this.setCellEditor((TableCellEditor)null);
  2307.       this.setEditingColumn(-1);
  2308.       this.setEditingRow(-1);
  2309.       this.setSurrendersFocusOnKeystroke(false);
  2310.       this.setPreferredScrollableViewportSize(new Dimension(450, 400));
  2311.       ToolTipManager var1 = ToolTipManager.sharedInstance();
  2312.       var1.registerComponent(this);
  2313.       this.setAutoscrolls(true);
  2314.    }
  2315.  
  2316.    protected TableModel createDefaultDataModel() {
  2317.       return new DefaultTableModel();
  2318.    }
  2319.  
  2320.    protected TableColumnModel createDefaultColumnModel() {
  2321.       return new DefaultTableColumnModel();
  2322.    }
  2323.  
  2324.    protected ListSelectionModel createDefaultSelectionModel() {
  2325.       return new DefaultListSelectionModel();
  2326.    }
  2327.  
  2328.    protected JTableHeader createDefaultTableHeader() {
  2329.       return new JTableHeader(this.columnModel);
  2330.    }
  2331.  
  2332.    protected void resizeAndRepaint() {
  2333.       this.revalidate();
  2334.       this.repaint();
  2335.    }
  2336.  
  2337.    public TableCellEditor getCellEditor() {
  2338.       return this.cellEditor;
  2339.    }
  2340.  
  2341.    public void setCellEditor(TableCellEditor var1) {
  2342.       TableCellEditor var2 = this.cellEditor;
  2343.       this.cellEditor = var1;
  2344.       this.firePropertyChange("tableCellEditor", var2, var1);
  2345.    }
  2346.  
  2347.    public void setEditingColumn(int var1) {
  2348.       this.editingColumn = var1;
  2349.    }
  2350.  
  2351.    public void setEditingRow(int var1) {
  2352.       this.editingRow = var1;
  2353.    }
  2354.  
  2355.    public TableCellRenderer getCellRenderer(int var1, int var2) {
  2356.       TableColumn var3 = this.getColumnModel().getColumn(var2);
  2357.       TableCellRenderer var4 = var3.getCellRenderer();
  2358.       if (var4 == null) {
  2359.          var4 = this.getDefaultRenderer(this.getColumnClass(var2));
  2360.       }
  2361.  
  2362.       return var4;
  2363.    }
  2364.  
  2365.    public Component prepareRenderer(TableCellRenderer var1, int var2, int var3) {
  2366.       Object var4 = this.getValueAt(var2, var3);
  2367.       boolean var5 = false;
  2368.       boolean var6 = false;
  2369.       if (!this.isPaintingForPrint()) {
  2370.          var5 = this.isCellSelected(var2, var3);
  2371.          boolean var7 = this.selectionModel.getLeadSelectionIndex() == var2;
  2372.          boolean var8 = this.columnModel.getSelectionModel().getLeadSelectionIndex() == var3;
  2373.          var6 = var7 && var8 && this.isFocusOwner();
  2374.       }
  2375.  
  2376.       return var1.getTableCellRendererComponent(this, var4, var5, var6, var2, var3);
  2377.    }
  2378.  
  2379.    public TableCellEditor getCellEditor(int var1, int var2) {
  2380.       TableColumn var3 = this.getColumnModel().getColumn(var2);
  2381.       TableCellEditor var4 = var3.getCellEditor();
  2382.       if (var4 == null) {
  2383.          var4 = this.getDefaultEditor(this.getColumnClass(var2));
  2384.       }
  2385.  
  2386.       return var4;
  2387.    }
  2388.  
  2389.    public Component prepareEditor(TableCellEditor var1, int var2, int var3) {
  2390.       Object var4 = this.getValueAt(var2, var3);
  2391.       boolean var5 = this.isCellSelected(var2, var3);
  2392.       Component var6 = var1.getTableCellEditorComponent(this, var4, var5, var2, var3);
  2393.       if (var6 instanceof JComponent) {
  2394.          JComponent var7 = (JComponent)var6;
  2395.          if (var7.getNextFocusableComponent() == null) {
  2396.             var7.setNextFocusableComponent(this);
  2397.          }
  2398.       }
  2399.  
  2400.       return var6;
  2401.    }
  2402.  
  2403.    public void removeEditor() {
  2404.       KeyboardFocusManager.getCurrentKeyboardFocusManager().removePropertyChangeListener("permanentFocusOwner", this.editorRemover);
  2405.       this.editorRemover = null;
  2406.       TableCellEditor var1 = this.getCellEditor();
  2407.       if (var1 != null) {
  2408.          var1.removeCellEditorListener(this);
  2409.          if (this.editorComp != null) {
  2410.             Component var2 = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
  2411.             boolean var3 = var2 != null ? SwingUtilities.isDescendingFrom(var2, this) : false;
  2412.             this.remove(this.editorComp);
  2413.             if (var3) {
  2414.                this.requestFocusInWindow();
  2415.             }
  2416.          }
  2417.  
  2418.          Rectangle var4 = this.getCellRect(this.editingRow, this.editingColumn, false);
  2419.          this.setCellEditor((TableCellEditor)null);
  2420.          this.setEditingColumn(-1);
  2421.          this.setEditingRow(-1);
  2422.          this.editorComp = null;
  2423.          this.repaint(var4);
  2424.       }
  2425.  
  2426.    }
  2427.  
  2428.    private void writeObject(ObjectOutputStream var1) throws IOException {
  2429.       var1.defaultWriteObject();
  2430.       if (this.getUIClassID().equals("TableUI")) {
  2431.          byte var2 = JComponent.getWriteObjCounter(this);
  2432.          --var2;
  2433.          JComponent.setWriteObjCounter(this, var2);
  2434.          if (var2 == 0 && this.ui != null) {
  2435.             this.ui.installUI(this);
  2436.          }
  2437.       }
  2438.  
  2439.    }
  2440.  
  2441.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  2442.       var1.defaultReadObject();
  2443.       if (this.ui != null && this.getUIClassID().equals("TableUI")) {
  2444.          this.ui.installUI(this);
  2445.       }
  2446.  
  2447.       this.createDefaultRenderers();
  2448.       this.createDefaultEditors();
  2449.       if (this.getToolTipText() == null) {
  2450.          ToolTipManager.sharedInstance().registerComponent(this);
  2451.       }
  2452.  
  2453.    }
  2454.  
  2455.    void compWriteObjectNotify() {
  2456.       super.compWriteObjectNotify();
  2457.       if (this.getToolTipText() == null) {
  2458.          ToolTipManager.sharedInstance().unregisterComponent(this);
  2459.       }
  2460.  
  2461.    }
  2462.  
  2463.    protected String paramString() {
  2464.       String var1 = this.gridColor != null ? this.gridColor.toString() : "";
  2465.       String var2 = this.showHorizontalLines ? "true" : "false";
  2466.       String var3 = this.showVerticalLines ? "true" : "false";
  2467.       String var4;
  2468.       if (this.autoResizeMode == 0) {
  2469.          var4 = "AUTO_RESIZE_OFF";
  2470.       } else if (this.autoResizeMode == 1) {
  2471.          var4 = "AUTO_RESIZE_NEXT_COLUMN";
  2472.       } else if (this.autoResizeMode == 2) {
  2473.          var4 = "AUTO_RESIZE_SUBSEQUENT_COLUMNS";
  2474.       } else if (this.autoResizeMode == 3) {
  2475.          var4 = "AUTO_RESIZE_LAST_COLUMN";
  2476.       } else if (this.autoResizeMode == 4) {
  2477.          var4 = "AUTO_RESIZE_ALL_COLUMNS";
  2478.       } else {
  2479.          var4 = "";
  2480.       }
  2481.  
  2482.       String var5 = this.autoCreateColumnsFromModel ? "true" : "false";
  2483.       String var6 = this.preferredViewportSize != null ? this.preferredViewportSize.toString() : "";
  2484.       String var7 = this.rowSelectionAllowed ? "true" : "false";
  2485.       String var8 = this.cellSelectionEnabled ? "true" : "false";
  2486.       String var9 = this.selectionForeground != null ? this.selectionForeground.toString() : "";
  2487.       String var10 = this.selectionBackground != null ? this.selectionBackground.toString() : "";
  2488.       return super.paramString() + ",autoCreateColumnsFromModel=" + var5 + ",autoResizeMode=" + var4 + ",cellSelectionEnabled=" + var8 + ",editingColumn=" + this.editingColumn + ",editingRow=" + this.editingRow + ",gridColor=" + var1 + ",preferredViewportSize=" + var6 + ",rowHeight=" + this.rowHeight + ",rowMargin=" + this.rowMargin + ",rowSelectionAllowed=" + var7 + ",selectionBackground=" + var10 + ",selectionForeground=" + var9 + ",showHorizontalLines=" + var2 + ",showVerticalLines=" + var3;
  2489.    }
  2490.  
  2491.    public boolean print() throws PrinterException {
  2492.       return this.print(javax.swing.JTable.PrintMode.FIT_WIDTH);
  2493.    }
  2494.  
  2495.    public boolean print(PrintMode var1) throws PrinterException {
  2496.       return this.print(var1, (MessageFormat)null, (MessageFormat)null);
  2497.    }
  2498.  
  2499.    public boolean print(PrintMode var1, MessageFormat var2, MessageFormat var3) throws PrinterException {
  2500.       boolean var4 = !GraphicsEnvironment.isHeadless();
  2501.       return this.print(var1, var2, var3, var4, (PrintRequestAttributeSet)null, var4);
  2502.    }
  2503.  
  2504.    public boolean print(PrintMode var1, MessageFormat var2, MessageFormat var3, boolean var4, PrintRequestAttributeSet var5, boolean var6) throws PrinterException, HeadlessException {
  2505.       return this.print(var1, var2, var3, var4, var5, var6, (PrintService)null);
  2506.    }
  2507.  
  2508.    public boolean print(PrintMode var1, MessageFormat var2, MessageFormat var3, boolean var4, PrintRequestAttributeSet var5, boolean var6, PrintService var7) throws PrinterException, HeadlessException {
  2509.       boolean var8 = GraphicsEnvironment.isHeadless();
  2510.       if (var8) {
  2511.          if (var4) {
  2512.             throw new HeadlessException("Can't show print dialog.");
  2513.          }
  2514.  
  2515.          if (var6) {
  2516.             throw new HeadlessException("Can't run interactively.");
  2517.          }
  2518.       }
  2519.  
  2520.       PrinterJob var9 = PrinterJob.getPrinterJob();
  2521.       if (this.isEditing() && !this.getCellEditor().stopCellEditing()) {
  2522.          this.getCellEditor().cancelCellEditing();
  2523.       }
  2524.  
  2525.       if (var5 == null) {
  2526.          var5 = new HashPrintRequestAttributeSet();
  2527.       }
  2528.  
  2529.       Printable var11 = this.getPrintable(var1, var2, var3);
  2530.       PrintingStatus var10;
  2531.       if (var6) {
  2532.          ThreadSafePrintable var20 = new ThreadSafePrintable(this, var11);
  2533.          var10 = PrintingStatus.createPrintingStatus(this, var9);
  2534.          var11 = var10.createNotificationPrintable(var20);
  2535.       } else {
  2536.          var10 = null;
  2537.       }
  2538.  
  2539.       var9.setPrintable(var11);
  2540.       if (var7 != null) {
  2541.          var9.setPrintService(var7);
  2542.       }
  2543.  
  2544.       if (var4 && !var9.printDialog((PrintRequestAttributeSet)var5)) {
  2545.          return false;
  2546.       } else if (!var6) {
  2547.          var9.print((PrintRequestAttributeSet)var5);
  2548.          return true;
  2549.       } else {
  2550.          this.printError = null;
  2551.          Object var12 = new Object();
  2552.          6 var14 = new 6(this, var9, (PrintRequestAttributeSet)var5, var12, var10);
  2553.          Thread var15 = new Thread(var14);
  2554.          var15.start();
  2555.          var10.showModal(true);
  2556.          Throwable var16;
  2557.          synchronized(var12) {
  2558.             var16 = this.printError;
  2559.             this.printError = null;
  2560.          }
  2561.  
  2562.          if (var16 != null) {
  2563.             if (var16 instanceof PrinterAbortException) {
  2564.                return false;
  2565.             } else if (var16 instanceof PrinterException) {
  2566.                throw (PrinterException)var16;
  2567.             } else if (var16 instanceof RuntimeException) {
  2568.                throw (RuntimeException)var16;
  2569.             } else if (var16 instanceof Error) {
  2570.                throw (Error)var16;
  2571.             } else {
  2572.                throw new AssertionError(var16);
  2573.             }
  2574.          } else {
  2575.             return true;
  2576.          }
  2577.       }
  2578.    }
  2579.  
  2580.    public Printable getPrintable(PrintMode var1, MessageFormat var2, MessageFormat var3) {
  2581.       return new TablePrintable(this, var1, var2, var3);
  2582.    }
  2583.  
  2584.    public AccessibleContext getAccessibleContext() {
  2585.       if (this.accessibleContext == null) {
  2586.          this.accessibleContext = new AccessibleJTable(this);
  2587.       }
  2588.  
  2589.       return this.accessibleContext;
  2590.    }
  2591.  
  2592.    // $FF: synthetic method
  2593.    static int access$200(JTable var0, RowSorterEvent var1, int var2) {
  2594.       return var0.convertRowIndexToModel(var1, var2);
  2595.    }
  2596.  
  2597.    // $FF: synthetic method
  2598.    static int[] access$300(JTable var0, RowSorterEvent var1) {
  2599.       return var0.convertSelectionToModel(var1);
  2600.    }
  2601.  
  2602.    // $FF: synthetic method
  2603.    static SizeSequence access$402(JTable var0, SizeSequence var1) {
  2604.       return var0.rowModel = var1;
  2605.    }
  2606.  
  2607.    // $FF: synthetic method
  2608.    static SizeSequence access$400(JTable var0) {
  2609.       return var0.rowModel;
  2610.    }
  2611.  
  2612.    // $FF: synthetic method
  2613.    static void access$500(JTable var0, int[] var1, int var2, ModelChange var3) {
  2614.       var0.restoreSortingSelection(var1, var2, var3);
  2615.    }
  2616.  
  2617.    // $FF: synthetic method
  2618.    static Throwable access$602(JTable var0, Throwable var1) {
  2619.       return var0.printError = var1;
  2620.    }
  2621. }
  2622.